Man*_*kam 1 c arrays pointers multidimensional-array
我有这个代码,我一直试图找出对指针,数组组合的疑问.
int main()
{
int s[4][2] = {
{1234,56},
{1212,13},
{1434,80},
{1312,78}
};
printf("%d\n",s[2]);
printf("%d\n",*s[2]);
printf("%d\n",s+2);
printf("%d\n",*(s+2));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
怀疑是: 即使s [2]和(s + 2)指的是同一个地址,为什么*(s [2])打印该值(即1434)但*(s + 2)打印相同的地址解决了(s + 2)打印的内容.不是*(s + 2)在第3个1D阵列的地址处的平均值(即s [2] [0])?
让我们来看看你的数组在内存中的外观:
+---------+---------+---------+---------+---------+---------+---------+---------+ | s[0][0] | s[0][1] | s[1][0] | s[1][1] | s[2][0] | s[2][1] | s[3][0] | s[3][1] | +---------+---------+---------+---------+---------+---------+---------+---------+ ^ ^ ^ ^ | | | | &s[0][0] &s[0][1] &s[1][1] | | | | &s[0] &s[1] | | | | s[0] s[1] | | | | s s+1 | | | &s &s+1
现在让我们来看s[0][0],你有五个可能指向该位置的指针:
&s[0][0].这是类型int *.&s[0].这是类型int (*)[2].s[0].这将衰减为指向第一个元素的指针s[0],并且等于1.s.这将衰减为指向第一个元素的指针s,并且等于2.&s.指向数组的指针int (*)[4][2].正如你所看到的,你可以有很多不同的指针指向完全相同的位置,但它们可能意味着不同的东西,这在语义上有很大的不同.
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |