C语言这里的(*p)[3]是什么意思?

#include<stdio.h>
int main()
{
int s[2][3]={0},(*p)[3],i=1,j=2;
p=s;
printf("%d\n",*(*(p+i)+j)); //显示0
printf("%d\n",*(p[i]+j)); //显示0
printf("%d\n",*(p+i)+j); //显示2293316
printf("%d\n",(*(p+i))[j]); //显示0
printf("%d\n",*p); //显示2293296
return 0;
}
上面的(*p)[3]是什么意思?怎么读??
还有为什么*(p+i)+j是显示2293316 ?
为什么*p显示2293296 ?
大神求解,另外*(p+i)+j是否为对s数组的第i行j列元素的不正确引用?
谢谢啦,在线等

*p是指针,*(p+i)+j是指向二维数组第i行第j个元素的指针,(*p)[3]表示把p声明为指向含有三个元素的数组的指针,指针以内存地址作为其值,2293216,2293296应该都是内存地址。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-29
没记错的话是定义了一个指向数组的指针,这个数组有三个元素。追问

那么为什么*(p+i)+j是显示2293316 ?为什么*p显示2293296 ?

追答

这里显示的是地址。2293296+24+16=2293316

追问

但是我是%d输出哦??
还有24 16怎么来的?

追答

弟弟 多看哈书哈我好久没看了不知道怎么解释书上有,那个24=3*8 16=2*8

好好学习!

追问

2293296+24+16!=2293316
2293296+24+16应该是2293336啊?我越来越混乱了

追答

不好意思哦 错了一个int型占4个字节 应该是:4*3+2*4+2293296=2293316

追问

嗯,那我懂了,谢谢

本回答被提问者采纳

C语言这里的(*p)[3]是什么意思?
p是指针,*(p+i)+j是指向二维数组第i行第j个元素的指针,(*p)[3]表示把p声明为指向含有三个元素的数组的指针,指针以内存地址作为其值,2293216,2293296应该都是内存地址。

在c语言中,(*p)[3]和*p[3]有什么区别?
1、*p[3] 这个是一个指针数组,它所代表的意思是每一个元素都相当于一个指针变量;例:int a=10,b=20,c=30;int*p[3]={&a,&b,&c};2、(*p)[3] p是一个指针变量,表示指向含有3个整型元素的一维数组;例:int a[3]={1,2,3}; 那么p就是指向这个数组a的指针;int(*p)[3]=&a;...

(*p)[3]在里面是什么意思,另外定义一个数组吗
C 数组本来就是指针 (*p)[3]相当于一个二维数组 p[]里存的是int型的指针 (P[1]+1)中+1就就相当于数组下标的偏移量

定义int(*p)[3]; 则定义了一个名为p的指针变量 它可以指向每行有三...
楼主你好!首先(*p)[3]是一个指针数组,意思就是p这个指针是指向一个含有3个元素的数组的,那么p指针每一次加1就相当于把p中存的地址加6(前提是int类型占2个字节,在vc中是占4个字节)。举个例子:int a[3][3];int(*p)[3];p=a;\/\/也就是把数组a的首地址存放到p中 那么p[1]就是a[...

c语言中 int a【3】【3】,(*p)【3】;p=a【0】; ??*(p+1)[2]指的是什...
p=a[0]:p指向二维数组a的第0行的行首元素的地址,也就是a[0][0]所对应的地址 (p+1)[2],也就是第一行的第2个元素的值,也就是a[1][2]

大一C语言题目 24、若有定义语句:int a[2][3],*p[3]; ,则以下
int *p[3];这里p是一个数组,包含三个元素,每个元素类型为int 所以 A p为数组名, 不可以赋值。B p[0]为int*, 而a为二维数组名,等效于int **, 类型不匹配。C a[1][2]为a的一个元素,类型是int,所以&a[1][2]是int*, 和p[0]类型相同, 所以这个赋值是合法的。D 这个没什么说...

...a[5][3],*p[3];p[0]=a[0];p[2]=a[4]是什么意思?
float a[5][3],*p[3];这是定义了两个float型的数组 a[5][3]是二维数组,*p[3]是指针数组 p[0]=a[0];将a[0]赋值给p[0]。p[2]=a[4]将a[4]赋值给p[2]。

有关C语言的,请问int *p[3]和int(*p)[3]的区别,请大侠帮忙解释!_百度...
前者是指针数组,包含3个元素,后者是一个数组型指针。区别一是:一个是3个元素的数组,相当于定义了三个变量;一个是单个变量。区别二 是:前者变量类型是int*,后者变量类型是int (*)[3],int*指针的步长是一个int,而int (*)[3]指针步长是3个int。int *p = new int[3];int nAddress0 ...

int *p[3]和int (*p)[3] 的区别,举例说明一下.
(1)int*p[3];\/\/定义了一个三维数组,其中的每个元素p[0]、p[1]、p[2]都是指向int变量的指针。(2)int(*p)[3];\/\/定义了一个指针,这个指针是指向一个三维数组的。两者之间的区别和联系可以用一个二维数组来阐述:int *p[3];\/\/定义p[3]为指针数组;int (*q)[3];\/\/定义q为数组指针;...

int (*ptr)[3] 是什么意思
3、int(*)[3];---实际上可以看作是一种数据类型。也就是第一个(int(*p)[3])中定义的p的数据类型 其实你要看他到底是什么,就是要看他最先和谁结合。 比如1中p先与*结合,那就说明p本质是一个指针;而2中p先与后面的[3]结合,说明他本质是一个数组。再慢慢理解。希望能帮到你。如...

相似回答