C 如何确定由*(arr+;i)[1]和**(arr+;i)表示的元素?
我无法理解以下因素是如何确定的:C 如何确定由*(arr+;i)[1]和**(arr+;i)表示的元素?,c,arrays,pointers,C,Arrays,Pointers,我无法理解以下因素是如何确定的: *(arr+1)[1]-7已打印 **(arr+1)-4已打印 #包括 int main() { int arr[3][3]={1,2,3,4,5,6,7,8,9}; printf(“%d%d”,*(arr+1)[1],**(arr+1)); 返回0; } arr可以更直观地写成这样: int arr[3][3]={ {1,2,3}, {4,5,6}, {7,8,9}, }; *(arr+1)[1]相当于*(arr+2),因为
*(arr+1)[1]
-7已打印**(arr+1)
-4已打印#包括
int main()
{
int arr[3][3]={1,2,3,4,5,6,7,8,9};
printf(“%d%d”,*(arr+1)[1],**(arr+1));
返回0;
}
arr
可以更直观地写成这样:
int arr[3][3]={
{1,2,3},
{4,5,6},
{7,8,9},
};
*(arr+1)[1]
相当于*(arr+2)
,因为a[n]
相当于*(a+n)
arr+2
跳过两行,给出一个指向{{7,8,9}的指针,然后两颗星取消引用其中第一个值
**(arr+1)
的工作原理相同。arr
可以更直观地写成这样:
int arr[3][3]={
{1,2,3},
{4,5,6},
{7,8,9},
};
*(arr+1)[1]
相当于*(arr+2)
,因为a[n]
相当于*(a+n)
arr+2
跳过两行,给出一个指向{{7,8,9}的指针,然后两颗星取消引用其中第一个值
**(arr+1)
的工作原理相同。根据定义,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
)的第一个元素(4,5,6
)。根据定义,a[b]/code>相当于*(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
)的第一个元素(4
)。“可以”?应该是!“直觉上”?正确地“可能”?应该是!“直觉上”?正确地