二维数组小问题

来源:百度知道 编辑:UC知道 时间:2024/05/11 05:25:35
#include<stdio.h>

void main()
{

int a[3][3],*p,i;
p=&a[0][0];
for(i=1;i<9;i++)
{
p[i]=i+1;

}
printf("%d\n",a[1][2]);

}

这样用是 没有问题的 a[3][3]虽然是个二维数组,但是它和一维数组的存储方式没有区别,在内存中它存储的方式是a[0][0]、a[0][1]、a[0][2]、a[1][0]、
a[1][1]、a[1][2]、a[2][0]、a[2][1]、a[2][2]按顺序存储,所以你让指针P指向a[0][0]的地址,
p[0]就是a[0][0],
p[1]就是a[0][1],
a[1][2]就是p[5]

所以最后输出a[1][2]的值就是6了 如果你还不明白 可以M 我

void main()
{

int a[3][3],*p,i;
p=&a[0][0];
for(i=1;i<9;i++)
{
p[i]=i+1;//这句有问题,p[i]是一个指针,你赋给它的是整形值,编译的时候应该会有警告告诉你啊

}
printf("%d\n",a[1][2]);

}

具体什么问题?
程序输出:6

怎么感觉你的程序那么乱,指针不是那么用的,不能给P加下标
#include<stdio.h>

void main()
{

int a[3][3];
int (*p)[3],i,j;
p=a;
for(j=0;j<3;j++)
for(i=1;i<3;i++)
{
*(*(p+j)+i)=(j+1)*(i+1);

}
printf("%d\n",a[1][2]);

}