C语言二维数组问题 20
我很纠结啊,二维指针和二级指针是什么概念?还有inta[3][4];int**p;p=a;为什么不合法啊!!!...
我很纠结啊,二维指针和二级指针是什么概念?
还有
int a[3][4];
int **p;
p=a;
为什么不合法啊!!! 展开
还有
int a[3][4];
int **p;
p=a;
为什么不合法啊!!! 展开
4个回答
展开全部
不理解主要是因为不清楚数组名和指针的区别。二者不是同样地东西。
二维数组是指一段连续的空间,比如int a[3][4]那么a就是一段3*4连续空间的名字而已。
所以sizeof(a)求的是这段空间的大小
而int **p;表明p是一个指针,它指向的是一个指针数组。
sizoef(p)求的是p这个指针(指针其实是个整型)所占空间大小。
数组名做进行值传递时是传数组首地址,所以很多人把数组名跟指针混淆
a == &a;//成立,因为a是一段空间的名字,左边是a的
p == &p;//不成立
从上可以大致知道数组名与指针的区别。
int *p[] = {a[0],a[1],a[2]};//这是个指针数组,里面的元素是指针!!
int **q = q;//合法
int a[3][4];//二维数组
q = a;//不合法
二维数组是指一段连续的空间,比如int a[3][4]那么a就是一段3*4连续空间的名字而已。
所以sizeof(a)求的是这段空间的大小
而int **p;表明p是一个指针,它指向的是一个指针数组。
sizoef(p)求的是p这个指针(指针其实是个整型)所占空间大小。
数组名做进行值传递时是传数组首地址,所以很多人把数组名跟指针混淆
a == &a;//成立,因为a是一段空间的名字,左边是a的
p == &p;//不成立
从上可以大致知道数组名与指针的区别。
int *p[] = {a[0],a[1],a[2]};//这是个指针数组,里面的元素是指针!!
int **q = q;//合法
int a[3][4];//二维数组
q = a;//不合法
展开全部
你把由四个int组成的一维数组看成一种类型 比如 INT4
那么int a[3][4]就是 INT4 a[3], 那么 a就是INT4类型的地址 ,而p是int*类型的地址
那么int a[3][4]就是 INT4 a[3], 那么 a就是INT4类型的地址 ,而p是int*类型的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只存在二级指针和二维数组,哪里有二维指针哦!可能是我没学到吧
*是指向地址符,你定义的int **p 就是定义了一个指针*p;
而p=a中的a 代表的是数组a[][]的首地址!所以不合法
应该是*p=a才是合法的
*是指向地址符,你定义的int **p 就是定义了一个指针*p;
而p=a中的a 代表的是数组a[][]的首地址!所以不合法
应该是*p=a才是合法的
追问
就是啊,我也纳闷哪里来的二维指针,网上的人告诉我的,要不我赶紧发上来问问,知道了,ok
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
谭浩强的书上写得很清楚。翻吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询