gpt4 book ai didi

c - 输出是什么?请解释一下,考虑到我是c新手

转载 作者:行者123 更新时间:2023-11-30 21:13:27 27 4
gpt4 key购买 nike

int a[3][4] = {
1,2,3,4,
5,6,7,8,
9,10,11,12,
};
printf("%u %u %u \n", a[0]+1, *(a[0]+1), *(*(a+0)+1));

最佳答案

是时候学习一下 C 语言数组的速成类(class)了。

首先,让我们修复数组的初始值设定项:

int a[3][4] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9, 10, 11, 12}
};

这定义了 int 4 元素数组的 3 元素数组。 表达式 a 的类型是“int 4 元素数组的 3 元素数组”。

现在是令人头痛的部分。除非它是 sizeof 或一元 & 运算符的操作数,或者它是用于在声明中初始化另一个数组的字符串文字,否则数组类型的表达式将具有它的类型隐式转换(“衰减”)为指针类型。

如果表达式a单独出现在代码中(例如在printf("%p", a);这样的语句中,它的类型会从“int 的 4 元素数组的 3 元素数组”到“指向 int 的 4 元素数组的指针”,或 int (*)[4] ,同样,如果代码中出现表达式a[i],则其类型由“4-element array of int”( int [4]) 到“指向 int 的指针”(int *)。如果 aa[i ]sizeof& 的操作数,但是转换不会发生。

以类似的方式,数组下标是通过指针算术完成的:表达式a[i]被解释为就像*(a+i)一样。您从数组基数偏移 i 个元素并取消引用结果。因此,a[0]*(a + 0) 相同,而 *(a + 0)*a 相同。 a[i][j] 与编写 *(*(a + i) + j) 相同。

下表总结了上述所有内容:

Expression   Type          Decays To    Resulting Value----------   ----          ---------    -----         a   int [3][4]    int (*)[4]   Address of the first element of the array        &a   int (*)[3][4] n/a          Same as above, but type is different        *a   int [4]       int *        Same as above, but type is different      a[0]   int [4]       int *        Same as above    *(a+0)   int [4]       int *        Same as above      a[i]   int [4]       int *        Address of the first element of the i'th subarray    *(a+i)   int [4]       int *        Same as above     &a[i]   int (*)[4]    n/a          Same as above, but type is different     *a[i]   int           n/a          Value of the 0'th element of the i'th subarray   a[i][j]   int                        Value of the j'th element of the i'th subarray *(a[i]+j)   int                        Same as above*(*(a+i)+j)  int                        Same as above

Hopefully, that should give you everything you need to figure out what the output should be. However, the printf statement should be written as

printf("%p %d %d\n", (void *) a[0]+1, *(a[0]+1), *(*(a+0)+1));

关于c - 输出是什么?请解释一下,考虑到我是c新手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899800/

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