请问下在C语言中int (*p)[4]与int **p到底有什么区别,我始终不太懂

如题所述

楼上的回答是在不敢苟同

*p[4]、(*p)[4]、**p的区别(由于里面牵扯一些东西比较深,我简单的讲讲吧)

*p[4]是指针数组,他是数组。数组里面放的是指针,简单的说定义了4个指针,分别是*p[0] *p[1] *p[2] *p[3],相当于将这四个指针打包到这个数组中

(*p)[4]是数组指针,他是指针并且是一个指向二维数组的指针。因为以行为单位,又称行指针。
通俗点讲,后面的[4]说明他的每行有4个元素,[0]代表第一列的下标,[1]代表第二列的下标,一次类推。(*p)的意思是指针p指向第一行,*(p+1)即指向第二行,同理一次类推。那么*(p+2)[3]的意思即是指二维数组第二行第四列的元素

**p是二级指针,即指向指针的指针,他也是一个指针,主要区别在于应用的范围不同,行指针作用对象仅仅是二维数组,二级指针的应用范围就广了,比较典型的就是他可以用指针参数传递内存,指针数组和数组指针可没有这样的用法。也可以用他动态申请内存,存储二维数组元素等等

楼主耐心学习吧,只要坚持下去,这些东西都会慢慢理解的
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-02-07
int (*p)[4] 这个是指针数组。里面存的是 4个int指针。数组名字叫p 。这里主要注意一下下优先级
()[]的优先级相同。结合方向是从左到右。所以先跟() 结合。int *p[4] 如果是这样就是 数组指针了。
int **p 是个二维指针。其实很好理解,打个比方。比如你的数据存在地址 2000 号中。你要从从2003号内存里找2000号内存。二维指针就是这样的。从2003 存的地址找到2002 再从2002存的地址找到2000。就是多了个弯而已。
第2个回答  2011-02-07
int (*p)[4] 中p是数组指针,指向一个int 的二维数组,第二维长度是4
int **p 中p可以指向任意长度的一个int二维数组,第二维长度不一定要是4
int *p[4] 是指针数组,p是一个数组,他的成员是int指针。
第3个回答  2011-02-07
int (*p)[4] 是指向一个p[4] 的数组
int **p 等价于int *p[4]

请问下在C语言中int (*p)[4]与int **p到底有什么区别,我始终不太懂
p是二级指针,即指向指针的指针,他也是一个指针,主要区别在于应用的范围不同,行指针作用对象仅仅是二维数组,二级指针的应用范围就广了,比较典型的就是他可以用指针参数传递内存,指针数组和数组指针可没有这样的用法。也可以用他动态申请内存,存储二维数组元素等等 楼主耐心学习吧,只要坚持下去,这些...

C语言中 int*p[4] 和 int(*p)[4]的区别
一、结合性不同:前者是指针数组,为4个int指针的数组,有4个元素;后者是数组指针,为一个指针,类型为指向包含4个int类型元素的一维数组的指针。二、含义不同:int*p[4]是指针的数组,也就是说它是一个数组,数组里存的是一个个的指针。int(*p)[4]是数组的指针,也就是说它shu是一个指针...

c语言问题!int *p[4]和int (*p)[4]有什么区别?
int *p[4],就是p本质上是个数组,只不过数组中的每个元素都是指针 int (*p)[4],就是p本质上是个指针,指针指向一个一维的数组 这种题的话,其实可以先根据运算符的优先级、结合性,先确定标识符本质上是一个什么,然后再去补充 例如,int *p[3],先根据优先级,等效于*(p[3]),所以p本...

int (*p)[4] 和 int *p[4]的区别?
一、性质不同 1、int (*p)[4]:int (*p)[4]是个指针,指向有四个int类型数据的数组。2、int *p[4]:int *p[4]是个数组,每个元素都是一个int *指针。二、长度不同 1、int (*p)[4]:int (*p)[4]的长度为1,为一个数组。2、int *p[4]:int *p[4]的长度为4,有四个元素空间。

C语言中int (*p)[4]与int **p的区别
int *p;是一个指针变量,与之相对应的是int p[n];int (*p)[4];\/\/是指向一个2维数组的指针,与之相对应的是int p[][4];int **p;\/\/是指向一个指针的指针 ,与之相对应的是int *p[n],它们都是指向字符串的指针数组,而且二位动态数组开辟后只能将值赋予它(**p),因为只有它的数据结构...

int(*p)[4] int*p[4]是一个意思吗?
当然不是,int(*p)[4]表示p是一个指针变量,它指向包含4个整型元素的一维数组 而int *p[4],由于方括号[]运算级别高,因此p先与[4]结合,此时p[4]定义成数组形式,再与前面的 * 结合,这样一来就是一个存放指针的数组了。

C语言中 int*p[4] 和 int(*p)[4]的区别是什么?
int*p[4]是指针的数组,也就是说它是一个数组,数组里存的是一个个的指针 int(*p)[4]是数组的指针,也就是说它是一个指针,指向的是一个数组。指针指向的类型会影响到指针加减运算时地址的位移。比如说有一个数组 int a[4],加上取址运算符 &a,这个表达式的类型就是指向数组的指针,可以...

int (*p)[4]和 int a[4]; int *p=a;有本质区别么, int (*p)[4]如何...
区分一下int* p[4]和int (*p)[4]前者代表p是一个数组,里面装的是int*型的指针;后者相反,p是一个指针,指向一个int[4]的数组。所以归根结底,这里p是一个指针。那么,我的理解是,*p打印出来是这个int[4]的首地址,而不是这个数组里面的值。而且,p+1的话,地址相当于以int[4]为单位...

int(*p)[4] int*p[4]
楼主你好。首先学习指针是有好多概念容易混淆。下面我来帮你区别一下:1、int(*p)[4];---ptr为指向含4个元素的一维整形数组的指针变量(是指针)2、int *p[4];---定义指针数组p,它由4个指向整型数据的指针元素组成(是数组)3、int(*)[4];---实际上可以看作是一种数据类型。也就是第一...

C语言的指针的问题。 int (* P)[4];和int * p[4]有什么区别。
int *p[4]由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。然后再与p前面的*结合,*表示次数组是指针类型的,每个数组元素都指向一个整型变量。数组指针 数组指针是指向数组的一个指针,如 int (*p)[4]表示一个指向4个元素的数组的一个指针。typedef int (* ...

相似回答