C语言的指针的问题。 int (* P)[4];和int * p[4]有什么区别。

如题所述

一个数组,若其元素均为指针类型数据,称为指针数组。
也就是说,指针数组中每一个元素都相当于一个指针变量。
一维指针数组的定义形式为:类型名 *数组名[数组长度]
例如:
int *p[4]
由于[]比*优先级更高,因此p先与[4]结合,形成p[4]的形式,这显然是数组形式。
然后再与p前面的*结合,*表示次数组是指针类型的,每个数组元素都指向一个整型变量。
数组指针
数组指针是指向数组的一个指针,如
int (*p)[4]
表示一个指向4个元素的数组的一个指针。

typedef int (* type1_t)(const char *,int)和typedef int type2_t(const char *,int)
前一个声明引入了type1_t类型作为函数指针的同义字,该函数有两个 const char * 类型的参数以及一个 int 类型的返回值
后一个声明引入了type2_t类型作为函数的同义字,该函数有两个 const char * 类型的参数以及一个 int 类型的返回值

不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-22
前者是声明了一个int型的存放指针的数组,数组大小为4,后者是声明一个指针,该指针指向int型数组 p,且该数组大小为4本回答被网友采纳
第2个回答  2010-12-22
前者是指针数组,元素为指针的数组,是一个数组,其中的元素为指针。后者是数组指针,指向数组的指针,是一个指针,其指向的类型是数组。
参考信息:http://zhidao.baidu.com/question/55453124.html
第3个回答  2010-12-22
一楼知识不够扎实哦,刚好说反了。注意[]的优先级大于*
第4个回答  2010-12-22
第一个是 P是一个指针,这个指针指向一个数组,这个数组每个元素都是一个整形
第二个是 p上一个数组,每个数组元素都是一个整形指针

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

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];---ptr为指向含4个元素的一维整形数组的指针变量(是指针)2、int *p[4];---定义指针数组p,它由4个指向整型数据的指针元素组成(是数组)3、int(*)[4];---实际上可以看作是一种数据类型。也就是第一个(int(*p)[4];)中定义的p的数据类型 其实你要看这种到底是什么...

C语言int (*p)[4]和int *p[4]区别
int *p[4], 是一个长度为4的指针数组,数组的元素为int*;sizeof(p) => 4*4 = 16;(32位系统一个指针4字节)用法:*(p[0])int (*p)[4] 是一个指向长度为4数组的指针,即int(*)[4];其本质是一个指针,如在32为系统上,sizeof(p) => 4 用法:(*p)[0]....

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

请问下在C语言中int (*p)[4]与int **p到底有什么区别,我始终不太懂
p[4]、(*p)[4]、**p的区别(由于里面牵扯一些东西比较深,我简单的讲讲吧)p[4]是指针数组,他是数组。数组里面放的是指针,简单的说定义了4个指针,分别是*p[0] *p[1] *p[2] *p[3],相当于将这四个指针打包到这个数组中 (*p)[4]是数组指针,他是指针并且是一个指向二维数组的...

下面讨论一下C语言中
讨论C语言中指针的使用,特别关注`int (*p)[4]`与`int * p[4]`以及二级指针`array`的区别。`int (*p)[4]`表示p是一个指针,指向一个有4个元素的数组,数组的类型为整数(int)。`int * p[4]`表示p是一个数组,数组中有4个元素,每个元素是一个整数(int)指针。而`array`被描述为二级...

c语言中 int *p[4]和int (*p)[4]在定义和使用方面有什么区别? O(∩...
p[4]这指针数组,定义一个数组,里面存放的是指针。(*p)[4]定义的是一个指向一维数组的指针,这是一个指针,p++相当于p的地址相加了1*4 举例说明:include <stdio.h> void main(){ int a[2][2]={{1,2},{8,9}};int *p[4],(*q)[2];q=a;p[0]=&a[0][0];p[1]=&a[0]...

编C语言时二维数组指针形式要写成int(*p)【4】,为什么不能写成int*...
首先整形二维数组的最容易懂的写法为:int p[2][4]; 变通一下就是,p是一个指针,该指针指向一个包含4个整形元素的数组。那么我们分别来看一下两种变形有什么不同。首先要说的一点是运算符的优先级,[]运算符的优先级比*运算符的优先级要高。因此要想把int p[2][4]转变成指针,就需要用(...

相似回答