读书人

int(*p)[四]与int*p[4]有什么不同

发布时间: 2012-08-08 14:32:45 作者: rapoo

int(*p)[4]与int*p[4]有什么不同 ?
还有 一个问题,关于二位数组的地大家是怎么理解的 ,什么指针的指针,我糊涂了

[解决办法]
前者,p是一个指针,指向一个数组,这个数组有4个int成员
后者,p本身是一个指针数组,每个成员指向一个int
[解决办法]
指针就是可以指向一块内存区域的变量。该变量的类型是你定义的指针前面的那个。比如:int *p那么p就可以指向一块内存,这区域存放int型的数据。如果你定义的是int **p,那么p就指向一块内存,这块内存存放的是int*的数据,这里面存放的是指针类型。然后你要对每一个指针再进行一次申请内存,那么这里面的每一个指针又指向了一块内存。
[解决办法]
int (*p)[4] 指的是指针数组,指向一个int型数组的指针
int *p[4] 指的是数组指针,int型的数组里面储存的指针


[解决办法]
建议LZ看看《C和指针》这本书,看完后会了解很多~~
[解决办法]
两维数组和单维数组的区别在于(a[x][y]和b[x]为例):
①a[i]是地址而b[i]是数值
②*(a+i)表示地址而*(b+i)表示数值
③a+1表示地址,但是实际上没有实际作用,因为无法利用a+1表示地址去取值。比如要取第二行第二列的值无法通过*(a+1+1)获取。而应该通过*(*(a+1)+1)获取
即按照一维数组方式获取指向第一维的值的表达式实际得到的结果都是地址。

int(*p)[4]与int*p[4]有什么不同?
查看一个变量究竟是什么只要看他和什么结合就可以了,它和什么结合就是什么,
int(*p)[4]与*结合表示他是一个指针,int*p[4]下标的优先级高,所以p与下标结合表示他是一个数组
所以int(*p)[4]表示一个指向长度为4的int型数组的指针,而int*p[4]表示一个数组,它的元素是指向int型的指针
[解决办法]
int(*p)[4]与int*p[4]的不同是在:int (*p)[4];是一个指针,该指针是一个指向具有四个元素的int类型的数组;int *p[4];是一个数组,是具有四个int类型的指针元素。
指针的指针可以理解为二重指针。即int a = 8; int *p = &a; int **q = &p;
**q的值就是a的值,即8,*q是&a,即指向a的一重指针。
[解决办法]
http://jixiuf.github.com/c/right-left-rule.html

读书人网 >C语言

热点推荐