int p[4]和int( p)[4],int (p)[4] 和 int p[4]的区别?
int p[4]和int( p)[4],int (p)[4] 和 int p[4]的区别?详细介绍
本文目录一览: C语言中 intp[4] 和 int(p)[4]的区别
int *p[4]; //定义一个指针数组,该数组中每个元素是一个指针,每个指针指向哪里就需要程序中后续再定义了。
int (*p)[4]; //定义一个数组指针,该指针指向含4个元素的一维数组(数组中每个元素是int型)。
区分int *p[n]; 和int (*p)[n]; 就要看运算符的优先级了。
int *p[n]; 中,运算符[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组。
int (*p)[n]; 中( )优先级高,首先说明p是一个指针,指向一个整型的一维数组。
int*p[4]是指针的数组,也就是说它是一个数组,数组里存的是一个个的指针
int(*p)[4]是数组的指针,也就是说它是一个指针,指向的是一个数组。指针指向的类型会影响到指针加减运算时地址的位移。比如说有一个数组 int a[4],加上取址运算符 &a,这个表达式的类型就是指向数组的指针,可以这样赋值 p = &a;。一般用于向函数传递二维数组的时候使用这种类型,这时还有一种更直观的写法
void matrix_sum(int matrix_a[][4], int matrix_b[][4]) {...}
这种写法和
void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4]) {...}
是等价的。
int* p[4] // 4个元素的数组,元素为int类型的指针
int (*p)[4] // p是一个指针,它指向 4个int型元素的数组
int (&p)[4] // p是引用, 它引用 4个int型元素的数组.
int *p[4] 是一个存int* 的一维数组
int (*p)[4] 是一个int 数组 *p指向a[0]
一、结合性不同:
前者是指针数组,为4个int指针的数组,有4个元素;
后者是数组指针,为一个指针,类型为指向包含4个int类型元素的一维数组的指针。
二、含义不同:
int*p[4]是指针的数组,也就是说它是一个数组,数组里存的是一个个的指针。
int(*p)[4]是数组的指针,也就是说它shu是一个指针,指向的是一个数组。
三、写法不同:
一般用于向函数传递二维数组的时候使用这种类型,这时还有一种更直观的写法:
void matrix_sum(int matrix_a[][4],int matrix_b[][4]) {...}
这种写法和void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4]) {...}是等价的。
扩展资料:
指针数组:如char *str_B[5] 系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。如果定义如下数组:
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};
他们在内存的存储方式分别如图1所示,可见,系统给数组a分配了
3×8的空间,而给n分配的空间则取决于具体字符串的长度。
此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。
参考资料来源;百度百科-指针数组
C语言中 intp[4] 和 int(p)[4]的区别是什么?
结合性不一样:前者是指针数组,为4个int指针的数组,有4个元素;后者是数组指针,为一个指针,类型为指向包含4个int类型元素的一维数组的指针。
int*p[4]是指针的数组,也就是说它是一个数组,数组里存的是一个个的指针
int(*p)[4]是数组的指针,也就是说它是一个指针,指向的是一个数组。指针指向的类型会影响到指针加减运算时地址的位移。比如说有一个数组 int a[4],加上取址运算符 &a,这个表达式的类型就是指向数组的指针,可以这样赋值 p = &a;。一般用于向函数传递二维数组的时候使用这种类型,这时还有一种更直观的写法
void matrix_sum(int matrix_a[][4], int matrix_b[][4]) {...}
这种写法和
void matrix_sum(int (*matrix_a)[4], int (*matrix_b)[4]) {...}
是等价的。
请问 int (p[4]) 和 int(p)[4]的区别并举例
int *(p[4])是指针数组,数组内存放的是四个指针
int (*p)[4]是数组指针,数组内存放的整形,而p指向该数组。
int *(p[4]) p[0-4]的值的类型都是 int* 这个就是 int* a[4] 把int*当作类型来看
int(*p)[4] p用来指向a[N][4]的数组 这样赋值: p = a 或者p= &a[i]
有必要正本清源:
int *(p[4]) 就是数组 加个()而已 等同于 int * p[4]
int(*p)[4] 就是指针
简单明了
)[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是二级指针,即指向指针的指针,他也是一个指针,主要区别在于应用的范围不同,行指针作用对象仅仅是二维数组,二级指针的应用范围就广了,比较典型的就是他可以用指针参数传递内存,指针数组和数组指针可没有这样的用法。也可以用他动态申请内存,存储二维数组元素等等
楼主耐心学习吧,只要坚持下去,这些东西都会慢慢理解的
int (p)[4] 和 int p[4]的区别?
int (*p)[4]为指向数组的指针,即p为指向包含4个元素的一维数组的指针变量;
int *p[4] 为指针数组,定义指针数组p,它由4个指向整型数据的指针元素组成;
int (*p)[4] 数组指针是指针,指针指向一数组。
int *p[4] 指针数组是数组,数组里面放指针。
前面的数组的元素是指针;
后面的是一个长度为4的指针数组,就同int型的数组一样了
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,有四个元素空间。
三、指向不同
1、int (*p)[4]:int (*p)[4]的指针指向明确,为数组的逻辑地址位置。
2、int *p[4]:int *p[4]每个指针指向哪里需要程序中后续再定义。
c语言问题!int p[4]和int (p)[4]有什么区别?
int *p[4]是定义了一个四个元素的数组,元素类型为int的指针
后一个是定义了一个int指针,指向内存中4个int大小一块区域的首地址,以四个int单位
如p++,是移动4
前者指针数组,后者数组指针
int *p[4],就是p本质上是个数组,只不过数组中的每个元素都是指针
int (*p)[4],就是p本质上是个指针,指针指向一个一维的数组
这种题的话,其实可以先根据运算符的优先级、结合性,先确定标识符本质上是一个什么,然后再去补充
例如,int *p[3],先根据优先级,等效于*(p[3]),所以p本质上是一个有三个元素的数组;那么数组的每个元素又是什么呢?是一个指针;那指针指向的又是什么呢?是指向一个int型的数据;所以整理一下就是p是一个有三个指向int数据的指针的数组,本质上就是一个数组
C语言 int p[4]与(int )p[4]一样吗?
亲,不一样的,一个是定义,一个是取值
是一样的,括号没什么用
都是表示一个指针数组,数组中有4个元素,每个元素都是一个int类型的指针
int(p)[4] intp[4]是一个意思吗?
int(*p)[4];------p为指针变量指向含4个元素的一维整形数组(p是一个指针)
int *p[4];-------定义指针数组p,该数组中有4个整形指针变量,(p是指针数组,其中有4个指针)
不一样
第一个是一个指向有4个int元素的指针,是一个指针
第二个是一个指针数组,是一个数组,里面保存有4个指针
是的 就是一个意思
不是,一个是数组指针,一个是指针数组
当然不是,int(*p)[4]表示p是一个指针变量,它指向包含4个整型元素的一维数组
而int *p[4],由于方括号[]运算级别高,因此p先与[4]结合,此时p[4]定义成数组形式,再与前面的 * 结合,这样一来就是一个存放指针的数组了。
两种定义:int (p)[4] 和 int p[4]分别的意义和区别!?
楼上正解:
也就是说,int
(*p)[4]这儿p是一个指针变量,它指向的是含4个元素的一维数组。
int
*p[4]这个是定义指针数组p,它由4个指向整形数据的指针元素组成。
看看如下的介绍,希望对你有帮助:
指向一维数组的指针
指向数组的指针可以指向一维数组,也可以指向二维数组,这里只讨论指向一维数组的指针。
上面讨论过指向数组元素的指针,它是指向数组的某一个元素。而这里讨论的指向一维数组的指针是指它指向的不是一个元素,而是由若干个元素组成的一维数组。例如:
int(,pa)[5];
Pa是一个指向一维数组的指针,它所指向的一维数组是由5个int型元素组成的。如果该指针加1,则将指向下面的5个元素oPa指针的增值是以5个元素的一维数组长度为单位的。实际上,指向一维数组的指针,是指向二维数组的某一列的首元素地址。例如:
int(*pa)[5];
int
a[3][5];
pa=a+1;
这表明pa是一个指向一维数组的指针,它指向二维数组a的第一行首列元素的地址。pa加1将指向第二行首列元素,pa-1将指向第0行首列元素。
[例7.21]
一个指向一维数组指针的例子。分析该程序的输出结果,说明指向一维数组的指针是怎祥赋值和使用的。
int
a[3][5]={1,2,3,4,5},{6,7,8,9,10},{ll,12,13,14,15}.
main(}
int(*p)[5];
p=a+1;
priatf
("%d,%d,%d\n",p[0][0],*(*(p+1)+1),*(p[-1]+3
}
执行该程序输出结果如下:
6,
12
说明;程序中p是一个指向一维数组的指针,它所指向的一维数组有5个int型元素。即p要指向一个包含有5个元素的一维数组。P的值是该一维数组的首元素地址。用a十1或&a[1]值赋给P,则使p指向a数组的第一行首列地值。不能用某行某列的地值给p赋值,P[0][0]等价**P,即a[[1][0]元素的值。*(*(p+1)+1)等价于p[1][1],即a[2}[1]元素的值。而*(P[-1]+3)等价于,*(*(p-1)+3),即a[0][3]元素的值。因此,输出上述结果。
实际上,指向一维数组的指针是一个二级指针,它所指向的是一个二维数组,给指向一维数组的指针所赋的值是二维数组的某行的行地址。二维数组a[3][5]的行地址表示为a十i,i为0,1,2.一个指向一维数组的指针(*
p)[5]可以用a+i(i=0,1,2)来进行赋值。
int (p)[4]和int p[4]到底是神马意思啊
int *p[4]中定义的p是有4整型指针的数组
int(*q)[4] q是指向具有4个整型元素的数组的指针!
用法
int f[10];
int x[4],y[4],z[4],w[4];
int a,b,c,d;
int *p[4] ={&a,&b,&c,&d};
p[0]= &a;p[1]=b;p[2]=&c;p[3]=&d;
和
int *p[4] ={x,y,z,w};
p[0]= x;p[1]=y;p[2]=z;p[3]=w;
//*(p[0]+1) == x[1]
p[0]+1 == x+1;
都是可以的;
初始化:
int(*q)[4] ={&a,&b,&c,&d};//不可以int(*)[4]与int* [4]不兼容;
int(*q)[4] ={x,y,z,w}; ;//不可以int(*)[4]只是一个指针;
int(*q)[4] =x ; //不可以 q 是int(*)[4]; x是int* 不兼容;
int(*q)[4] =&x ; //q,&x 都是 可以int(*)[4] ;
int(*q)[4] =&f ; // 不可以q 是 int(*)[4],&f是int(*)[10];不兼容
赋值:
q =x ; //q 不可以 q 是int(*)[4]; x是int* 不兼容;
q ={&a,&b,&c,&d};//不可以int(*)[4]与int* [4]不兼容,不可以这样赋值;
q ={x,y,z,w}; ;//不可以int(*)[4]只是一个指针,是个4个整型元素数组的指针;
//{} 内是int *[4] 是个int *指针的数组
q =&x ; //可以q,&x 都是 int(*)[4] ;
q =&f ; // 不可以q 是 int(*)[4],&f是int(*)[10];不兼容
*q 是个四个元素的数组
(*q)+1 数组第一个元素的地址
(*q)[1] 数组第一个元素
不是的,*p[4]表示长度为4的指针数组(本质是一个数组,就当一个数组用就行了),而(*p)【4】表示指向长度为4的数组的一个指针(本质是一个一级指针),当然他们的具体更加详细的区别(指针数组和数组指针)可以参考你的学习资料啦,而二级指针的一个标志是有两个**的,在实际应用中一般很少用到二级指针或多级指针,用一级指针指向二维数组(如(*p)【3】【4】)来进行排序的比较常见,希望可以帮助你,有什么不懂得可以追问
(一道选择题)有关于两种定义int (p)[4] 和 int p[4]的意义和区别
B
a+j 是地址,p[j]是数组元素,可知p为数组指针
B为数组指针,里面有4个地址;
D为二维数组指针,4为二维数组每行元素的个数
从结合律可以看出来,* p先结合,指向一个地址,从该地址开始有4个元素
选B
原题显然是要定义一个指针数组,用来存放地址,那么就是选B了
B是定义了一个含有四个元素的指针数组。
D则是定义了一个指向“一个含有四个元素的一维整形数组”的指针变量。
选B
int (*p)[4]
定义了一个指针p,指向一个4个元素的数组。只是定义一个指针,指向4个元素的数组
int *p[4]
定义了一个数组指针p[4],p的每个元素指向一个整型的数据。就是数组里面保存的是指针。