加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【C语言补漏】 指针和二维数组

发布时间:2020-12-15 04:47:40 所属栏目:百科 来源:网络整理
导读:二维数组的定义 二维数组的其实就是在一维数组上进行扩展的。 假设我们已经定义了一个二维数组array如下: array表示的是什么? array是二维二维数组的首地址。由于是二维数组,也就是指向包含五个元素的数组的指针。跨度是五个元素。 下面的例子: #include

二维数组的定义

二维数组的其实就是在一维数组上进行扩展的。

假设我们已经定义了一个二维数组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


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读