关于行指针的问题
#include <stdio.h>
int main(){
int j[2][3]={0,1,2,3,4,5};
return 0;
}
1. 为什么有人说*j是行指针?为什么j不是行指针?
2.为什么说 j和*j都是表示第一个元素的地址? j和*j有什么不同?
最近对指针不是很懂,麻烦高手解答。。。。。。
[解决办法]
#include <stdio.h>
int main()
{
int j[2][3]={0,1,2,3,4,5};
//相当于2行3列
//int j[2][3]={ {0,1,2}, {3,4,5} };
int ix, iy;
for(ix=0; ix<2; ix++)
{
for(iy=0; iy<3; iy++)
{
printf("%d, ", j[ix][iy]);
}
printf("\n");
}
printf("\n");
//j的输出,
for(ix=0; ix<2*3; ix++)
{
printf("%d\n", j[0][ix]);
}
return 0;
}
[解决办法]
j指向的是二维数组
*j指向的是一维数组
虽然指的“点”相同,但意义不同
比如j+1,会跨过整个二维数组
而*j+1,只会跨过二维数组的一个维度
[解决办法]
其实你可以把二维数组看成一个数组元素为一维数组的一维数组。。所以*j也就是数组的第一个元素。。也就是第一行。。
j指向整个二维数组的首地址。。而*j是二维数组第一个元素也就是第一行的首地址。。这两个地址明显是一样的。。
[解决办法]
二维数组,其实没有行列之分的,在内存中是以线性存储的。之所以提出行列是把二维数组看成行列式比较好理解吧。行指针,即每行的首地址。*j之所以可以当做第一行的首地址,*这儿是引用的使用;其实理解上可以为:*(j+0)即第一行的地址。