gpt4 book ai didi

c - 在C中使用指针访问一维数组和二维数组的元素

转载 作者:行者123 更新时间:2023-11-30 18:58:10 26 4
gpt4 key购买 nike

我正在尝试学习C,但我被下面的代码困住了。我从我对C的基础知识中了解到的是,数组名称本身是一个指向数组第一个元素的指针。二维数组中的元素逐行存储。所以我尝试使用数组名称作为指针来打印一维数组和二维数组中元素的值。但对于Code 1它按我的预期工作。但是Code 2给出了意想不到的结果(它给出了每行的起始地址)。出现这种情况的原因是什么?我觉得我的理解有问题。谁能澄清这个错误。

// Code 1
//-------
#include <stdio.h>
int main () {
int array[2][3] = {{5, 7, 9}, {2, 5, 77}};
int j;
for (j=0; j < 6; j++)
printf("%d\t", *(array+j));
return 0;
}

//Code 2
//------
// #include <stdio.h>
// int main () {
// int array[6] = {5, 7, 9, 2, 5, 77};
// int j;
// for (j=0; j < 6; j++)
// printf("%d\t", *(array+j));
// return 0;
// }

最佳答案

由于多维数组在内存中是连续的,因此您只需获取指向数组第一个元素的指针并将其用作指向一维数组的第一个元素即可:

int array[2][3] = { { 5, 7, 9 }, { 2, 5, 77 } };
int *p = &array[0][0];

for (int i = 0; i < 6; i++)
printf("%d\n", p[i]);

您最初的尝试,*(array+j)是错误的,因为它相当于array[j],它本身就是一个数组,所以您尝试:

  1. 使用 %d 打印一个指针(array[j],作为一个数组,在传递给函数时会衰减为指针),就好像它是一个整数一样 格式说明符 - 调用未定义的行为,同时它不会打印您真正想要打印的内容;

  2. 越界访问数组(array 只有两个元素,都是 int [3] 类型,因此当您访问第二个、第三个、...、第五个元素)。

关于c - 在C中使用指针访问一维数组和二维数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17905755/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com