gpt4 book ai didi

c - *(arr+i)[1] 和 **(arr+i) 表示的元素是如何确定的?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:29 26 4
gpt4 key购买 nike

我不明白如何确定以下元素:

  1. *(arr+1)[1] - 7 被打印出来。

  2. **(arr+1) - 打印 4。

#include <stdio.h>
int main()
{
int arr[3][3]={1,2,3,4,5,6,7,8,9};
printf("%d %d",*(arr+1)[1],**(arr+1));
return 0;
}

最佳答案

根据定义,a[b] 等同于*(a + b)

[](后缀)的优先级高于*(前缀),因此*a[b] 解析为* (a[b]).

  1. *(arr+1)[1] 解析为 *((arr+1)[1])

    *((arr+1)[1]) 等同于 *(*(arr+1+1))

    *(*(arr+1+1)) 简化为 **(arr+2)

    **(arr+2) 等价于*(arr[2])

    *(arr[2]) 等价于*(arr[2]+0)

    *(arr[2]+0) 等同于 arr[2][0]

  2. **(arr+1) 等价于*(arr[1])

    *(arr[1]) 等价于*(arr[1]+0)

    *(arr[1]+0) 等同于arr[1][0]

至于实际数据:

int arr[3][3]={1,2,3,4,5,6,7,8,9};

有点难读。更好:

int arr[3][3]={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};

在第一种情况下,arr[2][0] 给出第三个子数组 (7,8,9) 的第一个元素 (7) ) 而在第二种情况下,arr[1][0] 为您提供第二个子数组 (4, 5,6).

关于c - *(arr+i)[1] 和 **(arr+i) 表示的元素是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55556584/

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