gpt4 book ai didi

c - 指向一维数组和二维数组有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:30 25 4
gpt4 key购买 nike

当我运行这段代码时:

#include<stdio.h>
int main()
{
int a[2]={1,2};
printf("%d \t %d",*(a+1),a[1]);
}

它输出:2 2

接下来我使用二维数组来解决同样的问题,但它给了我错误。

#include<stdio.h>
int main()
{
int a[2][2]={{1,2},{3,4}};
printf("%d \t %d",*(a+1),a[1][0]);
}

我的想法是指向(a+1)的地址并打印它的内容。但是它给出了Wrong Format错误。但是当我将它指向 *(a+1) 时,即当我使用 * ( *(a+1)) 时,它正在打印内容。

为什么程序指向(a+1)时不打印内容?指向一维数组和二维数组有什么区别?

最佳答案

When I run this code [...] It outputs : 2 2

这是因为表达式 *(a+1)a[1] 是相同的:C 中的方括号表达式通过将它们的操作数相加来工作(即 >a1 在你的情况下)然后取消引用结果。

I used two dimensional array for the same problem but it is giving me errors.

这是因为 *(a+1)a 的元素属于同一类型。当aint 的一维数组时,其元素是int。当aint 的二维数组时,其元素是int 的一维数组。在你的第二个例子中,你试图将 int 的一维数组传递给 printf ,格式说明符需要一个 int,这会导致错误。

My idea here is to point the address of (a+1) and print its content.

然后您需要再添加一级取消引用(即,再添加一个星号)来“对抗”一维数组:

printf("%d \t %d",**(a+1),a[1][0]);
// ^

demo.

获取 a[1][1] 的表达式稍微复杂一些:

printf("%d \t %d",*(*(a+1)+1),a[1][1]);

demo.

关于c - 指向一维数组和二维数组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30411632/

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