3 回答

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
您略有錯(cuò)誤:它moreThings還會(huì)衰減到第一個(gè)元素的指針,但是由于它是一個(gè)字符數(shù)組的數(shù)組,因此第一個(gè)元素是“ 8個(gè)字符數(shù)組”。因此,衰減的指針是這種類型的:
char (*p)[8] = moreThings;
的值的指針的當(dāng)然是相同的值&moreThings[0][0],即,第一元件的第一元件,并且也相同的&a,但類型是不同的一個(gè)在每種情況下。
這是一個(gè)例子,如果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:整個(gè)字符數(shù)組的地址,它是一個(gè) char[N][3]
&a[0],與a:第一個(gè)元素的地址相同,它本身就是一個(gè)char[3]
&a[0][0]:第一個(gè)元素的第一個(gè)元素的地址,即 char
這表明不同的對(duì)象可能具有相同的地址,但是如果兩個(gè)對(duì)象具有相同的地址和相同的類型,則它們是相同的對(duì)象。

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊
Kerrek很好地解釋了
除此之外,我們可以通過(guò)以下示例證明這一點(diǎn):
#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->通過(guò)增加整個(gè)數(shù)組大小來(lái)移動(dòng)指針。即:400個(gè)字節(jié)
&a [0] + 1->通過(guò)增加列的大小來(lái)移動(dòng)指針。即:40個(gè)字節(jié)。
&a [0] [0] +1->通過(guò)添加元素的大小(即4個(gè)字節(jié))來(lái)移動(dòng)指針。
[int大小為4個(gè)字節(jié)]
希望這可以幫助。:)
- 3 回答
- 0 關(guān)注
- 443 瀏覽
添加回答
舉報(bào)