c语言,c语言中指针数组元素与一般么指针变量有什么区别?为什么一般的指针不能指向二维数组,而一个指

c语言,c语言中指针数组元素与一般么指针变量有什么区别?为什么一般的指针不能指向二维数组,而一个指针数组元素却可以?

    c语言中指针数组元素与一般么指针变量没有区别

    例如:int * a[10] ;

               int * p;

               int data=0;

    则      a[0]=&data; p=&data;都是可以的

    为什么一般的指针不能指向二维数组,而一个指针数组元素却可以?我觉得你的这个问题问的有问题,应该是问:为什么一般的指针不能指向二维数组,而一个指向数组的指针变量却可以吧?

    例如:int (* pa)[10][10] ;//定义一个指向整型二维数组的指针

               int * p;

               int data[10][10];

    则      pa=&data;//可以

    而      p=&data;//不可以

追问

这里是书上的一个例子,是指针数组元素指向一维数组。

追答

其实 int *pa[2];说明pa[0]是指向一个整型变量地址的指针变量
而 a[0][0]在内存中本来就是一个整型
所以把& a[0][0]赋值给pa[0]应该是合法的,我想你也可以理解
我们知道a[0]是一个地址,是常量,是 a[0][0]的地址,所以当然也可以了
但是我们要知道:或者更准确的说pa[0]里存储的不是数组的地址,是数组中元素(整型变量)的地址

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-22
其实C语言中只有一维数组并不存在二维数组。
二维数组就是几个一维数组凑在一起。
所以,
一般的指针指向一维数组。
指针数组 指向二维数组。
身份对等,共建和谐家园。追问

数组指针可以指向二维指针,但是指针数组元素和一般的指针本质上不都是指针变量吗?

为什么就一个可以,另一个却不可以了?指针数组元素的功能却和数组指针一样了。

追答

你这样就不对了。
指针变量。
指针数组。
对比下:
字符型变量。
字符型数组。
一样样的。
变量是占一个空间。
数组是占好多个空间。
人家怎么说也是数组,怎么会和区区一个变量对等?
我觉得吧,
关键在于你没理解指针数组是数组啊!
char *p;
char (*str)[10];
差距是巨大的。是不可弥补地。
其实我没有太认真看你的问题,不过我想,也许我说的是对的呢?

追问

是不一样,但字符型变量和字符型数组元素是一样的吧。

追答

是的。都用来存储字符型数据。
所以,你看:
指针 用来指向 一维数组。
指针数组(几个指针变量,每个都用来指向二维中的一个一维数组) 用来指向 二维数组。
不是很合理吗?

相似回答