我不明白如何确定以下元素:
*(arr+1)[1]
- 7 被打印出来。**(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])
.
*(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]
。**(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/