二维数组的定义
二维数组的其实就是在一维数组上进行扩展的。
假设我们已经定义了一个二维数组array如下:
array表示的是什么?
array是二维二维数组的首地址。由于是二维数组,也就是指向包含五个元素的数组的指针。跨度是五个元素。
下面的例子:
#include
int main()
{
int array[4][5];
int i,j;
int k = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
array[i][j] = k;
k++;
}
}
printf("size of int : %dn",sizeof(int));
printf("array : %pn",array);
printf("array+1 : %pn",array+1);//array包含了五个元素的指针
}
运行结果:
size of int : 4
array : 000000EFC48FF530
array+1 : 000000EFC48FF544
请按任意键继续. . .
array 与array +1的地址相差14 十进制上也就是20,4×5 = 20,也就是说,两者5个int类型的跨度。
所以,
array :指向包含五个元素的数组的指针,也就是第一行的首地址;
array +1:同样是指向包含五个元素的数组的指针,是第二行的首地址;
*(array +1)表示什么
由上面可知,array +1:是第二行的首地址,所以*(array +1) 应该是二维数组array的第二行第一列的数据,=array[1][0] 用下面程序验证一下;
#include
int main()
{
int array[4][5];
int i,j;
int k = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
array[i][j] = k;
k++;
}
}
printf("*(array+1) : %dn",*(array + 1));
printf("array[1][0] : %dn",array[1][0]);
}
运行结果:
*(array+1) : -1225787644
array[1][0] : 5
请按任意键继续. . .
O(∩_∩)O哈哈~,显然不是!!!
事实上是这样的
*(array+1) ==array[1]
请看下面你的程序
#include
int main()
{
int array[4][5];
int i,j;
int k = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
array[i][j] = k;
k++;
}
}
printf("array+1 : %pn",array + 1);
printf("*(array+1) : %pn",array[1][0]);
printf("**(array+1) : %dn",**(array + 1));
}
运行结果:
array+1 : 0000002C089EF644
*(array+1) : 0000002C089EF644
array[1][0] : 5
**(array+1) : 5
请按任意键继续. . .
这样就验证了 *(array+1) ==array[1],就是指向第二行第一个元素的地址。
**(array+1) = array[1][0]
*(*(array+1)+3)表示什么意思呢?
不难推断,*(array+1)+3应该是指向第二行第三列元素的指针;*(*(array+1)+3)是第二行第三列的元素
看下面的代码
#include
int main()
{
int array[4][5];
int i,j;
int k = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 5; j++)
{
array[i][j] = k;
k++;
}
}
printf("&array[1][3] : %pn",&array[1][3]);
printf("*(array+1)+3 : %pn",*(array + 1) + 3);
printf("array[1][3] : %dn",array[1][3]);
printf("*(*(array+1)+3) : %dn",*(*(array + 1) + 3));
}
运行结果:
&array[1][3] : 000000D35575F7F0
*(array+1)+3 : 000000D35575F7F0
array[1][3] : 8
*(*(array+1)+3) : 8
请按任意键继续. . .
结果果然不出所料。
结论
*(array+i) == array[i]
*(*(array+i)+j) == array[i][j]
*(*(*(array+i)+j)+k) == array[i][j][k]
★finished by songpl,2018.12.18
以上是内存溢出为你收集整理的【C语言补漏】 指针和二维数组全部内容,希望文章能够帮你解决【C语言补漏】 指针和二维数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)