3 回答
TA贡献1871条经验 获得超8个赞
您略有错误:它moreThings还会衰减到第一个元素的指针,但是由于它是一个字符数组的数组,因此第一个元素是“ 8个字符数组”。因此,衰减的指针是这种类型的:
char (*p)[8] = moreThings;
的值的指针的当然是相同的值&moreThings[0][0],即,第一元件的第一元件,并且也相同的&a,但类型是不同的一个在每种情况下。
这是一个例子,如果char a[N][3]:
+===========================+===========================+====
|+--------+--------+-------+|+--------+--------+-------+|
|| a[0,0] | a[0,1] | a[0,2]||| a[1,0] | a[1,1] | a[1,2]|| ...
|+--------+--------+-------+++--------+--------+-------++ ...
| a[0] | a[1] |
+===========================+===========================+====
a
^^^
||+-- &a[0,0]
|+-----&a[0]
+-------&a
&a:整个字符数组的地址,它是一个 char[N][3]
&a[0],与a:第一个元素的地址相同,它本身就是一个char[3]
&a[0][0]:第一个元素的第一个元素的地址,即 char
这表明不同的对象可能具有相同的地址,但是如果两个对象具有相同的地址和相同的类型,则它们是相同的对象。
TA贡献1795条经验 获得超7个赞
Kerrek很好地解释了
除此之外,我们可以通过以下示例证明这一点:
#include <stdio.h>
int main ()
{
int a[10][10];
printf (".. %p %p\n", &a, &a+1);
printf (".. %p %p \n ", &a[0], &a[0]+1);
printf (".. %p %p \n ", &a[0][0], &a[0][0] +1);
}
输出为:
.. 0x7fff6ae2ca5c 0x7fff6ae2cbec = 400 bytes difference
.. 0x7fff6ae2ca5c 0x7fff6ae2ca84 = 40 bytes difference
.. 0x7fff6ae2ca5c 0x7fff6ae2ca60 = 4 bytes difference.
&a +1->通过增加整个数组大小来移动指针。即:400个字节
&a [0] + 1->通过增加列的大小来移动指针。即:40个字节。
&a [0] [0] +1->通过添加元素的大小(即4个字节)来移动指针。
[int大小为4个字节]
希望这可以帮助。:)
- 3 回答
- 0 关注
- 401 浏览
添加回答
举报