我不明白如何确定以下要素:
*(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;
}
Run Code Online (Sandbox Code Playgroud)
根据定义,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};
Run Code Online (Sandbox Code Playgroud)
有点难读。更好:
int arr[3][3]={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,arr[2][0]为您提供7第三个子数组()的第一个元素(),7,8,9在第二种情况下,arr[1][0]为您提供4第二个子数组()的第一个元素(4,5,6)。