您的位置:首页 > 编程语言 > C语言/C++

C++课程第一课中出现的问题的探讨

2016-03-28 16:42 302 查看
课程中间出现了一些很重要也比较有意思的问题,教学相长,又让我复习了一遍指针,废话不说,进入正题。

problem 1: 指针数组到底是什么?

指针数组,即存放指针(地址)的数组,数组的每一个元素都是一个指针,语法格式举例,int *p[3]; 在运算符的优先级中,括号的优先级最高(中括号的优先级仅次于小括号),因此,对于int *p[3] ,首先,编译器识别p[3],这代表数组,再识别int *这 代表数据类型是int指针型,在这里,我们换一种写法使之更好理解,其实,我更喜欢这种写法,我们把 int *p[3]写成 int* p[3](int * 和int*是一样的,这里只是为了更好理解!体现c语言书写的自由性);说完了定义,它有什么用呢,主要应用于接收多个字符串。

<span style="font-family:Courier New;">#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
char *p[3]={"123","456","789"};//对比char *p="123"思考
cout<<p[0]<<endl;
cout<<p[1]<<endl;
printf("%s\n",p[2]);
return 0;
}</span>


problem 2:int *p[3]是指针数组,那int (*p)[3]又是什么鬼?

首先依然是说明,int (*p)[3] 是指向长度为3的数组的指针! 刚才说过了,小括号的优先级最高,因此,编译器先识别(*p)显然,这是一个指针,然后编译器又遇到了[3],显然,这是一个数组,又(*p)在前面,显然,(*p)被理解为数组的更高一维(联系二维数组int a[3][4],a[0],a[1],a[2]是三个长度为4的一维数组)

说了半天,有什么用啊,int (*p)[3]主要用来处理二维数组

<span style="font-family:Courier New;">#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
int a[3][4]={{1,1,1,1},{2,2,2,2},{3,3,3,3}};
int (*p)[4];//指向长度为4的数组的指针
for(p=&a[0];p<=&a[2];p++) //或者for(p=a;p<=a+2;p++),二维数组的维的理解还是很重要的
{
for(int i=0;i<4;i++)
{
cout<<(*p)[i]<<" ";
}
cout<<endl;
}
return 0;
}</span>


problem 3:二重指针又是什么啊?

说明: 二重指针,就是指向指针的指针,写法举例 ,int **p;好吧,该死的维数又来了,让我们从int **p的最右边读起,p是一个二重指针,它只能存储指针变量的地址,*p是一个指针,他只能存储 int 型变量的地址,**p是整型变量。

有什么用呢?int x=1; int *p=&x;int q=&p;cout<<**p<<endl;(为了输出个int 你至于吗?)

<span style="font-family:Courier New;">#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
char *p[3]={"123","456","789"};
char **q;
for(q=&p[0];q<=&p[2];q++) //一重指针遍历普通数组,二重指针遍历指针数组
{
cout<<*q<<endl;
}
return 0;
}</span>

problem 4:主函数的参数问题,http://blog.csdn.net/liuzhan214/article/details/49977391 这个我以前写过,如果依然不明白就再看看 char *p[3]的含义

problem 5;指向函数的指针

说明,函数也有入口地址,所以,也有指向函数的指针,这个纯粹语法,看下示例就ok

<span style="font-family:Courier New;">#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int Max(int x,int y)
{
return x>y?x:y;
}
int Min(int x,int y)
{
return x<y?x:y;
}
int main()
{
int a=3,b=5;
int (*p)(int,int);
//定义指向函数的指针变量p,指向的函数的返回值,参数列表必须与之一致
p=Max;
cout<<(*p)(a,b)<<endl;
p=Min;
cout<<(*p)(a,b)<<endl;
return 0;
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: