帮我看看,到底错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/06/25 09:33:31
这个C语言程序错哪了?

# include<stdio.h>
main()
{
int *p; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p1)[4];
p=a;
p1=p;
printf("the arry is %d\n",*(*(p1+1)+1));

}

打家帮看看,谢谢你们~!
请问 fly_fire - 经理 四级

p不是一个地址吗?为什么不能写成p=a?不是有a==a[0]=&*a 吗?

# include<stdio.h>
int main()
{
int *p;
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p1[4]; //定义指针数组
p=a[0]; //a是二维数组。 p = a
p1[0]=p; //
printf("the arry is %d\n",*(*(p1+1)+1));
getchar();
}

to fly_fire :
你说的是对的。

to 楼主:
多维数组数组名,不仅仅是个简单的指针。
举个例子吧。
a[10][10]
a 是这个数组首地址;
a[0]也是数组首地址。
但是*a 并不是首地址的内容,还是首地址,**a才是内容。
所以这个a 是特别的,并不能简单的等同于 a[0]。

怎么错了?你说说啊~

改成这样
# include<stdio.h>
main()
{
int *p;int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*p1)[4];
p1=a;
printf("the arry is %d\n",*(*(p1+1)+1));

}
第一个指针变量p只代表一个地址(占一个整形的长度),而后面的p1指向的是a[3][4](它的地址是a[0][0]的地址,是4个整形的长度)

to jeanhonk:
你这样的话只能访问a[0][0]到a[0][3]。。。因为你只指向a[0],越界的话指针访问会出错的。
需要把指针数组全部赋值:
# include<stdio.h>
main()
{
int *p; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; <