一维数组名与二维数组名的关联
1.一維數(shù)組名與二維數(shù)組名的關(guān)系之于普通指針與數(shù)組指針的關(guān)系
2.首先數(shù)組名編譯器會(huì)隱式變換看做指針常量,因此a[i]與a+i是等價(jià)的。
a+i返回由i指定的行地址,假設(shè)元素類(lèi)型為char,則行指針類(lèi)型為char ()[n],其中n為列寬,即每行元素?cái)?shù)量。當(dāng)行指針指向一個(gè)地址時(shí),此時(shí)該行首元素地址與行地址是一致的,但是類(lèi)型不同,這個(gè)是理解二維數(shù)組指針的關(guān)鍵。
星號(hào)在指針前含義為取指針指向內(nèi)存中的值,但是由于行指針指向的是一行元素整體而不是單個(gè)元素,因此(a+i)返回i指定行的所有元素,但是一行元素是不可能以值的形式直接獲得,所以編譯器返回的是一維數(shù)組指針char ,所以再此情形下你可以理解為星號(hào)是將行指針轉(zhuǎn)換為普通一維數(shù)組指針,即 char ()[n]轉(zhuǎn)換為 char *。
&a[i]返回i指定行的第一元素地址,與&a[i][0]等價(jià)。
對(duì)于&a[i]是此行第一元素的值,是因?yàn)?amp;a[i]等于i行0列元素的地址的地址,則等于i行0列元素的地止。(并且&&a[i]也不存在)
由下面一段代碼可見(jiàn):
#include<stdio.h>
int main()
{
int a[2][5];
printf("%p\n",&a[1]);
printf("%p\n",&a[1][0]);
printf("%p\n",a[1]);
return 0;
}
總結(jié)
以上是生活随笔為你收集整理的一维数组名与二维数组名的关联的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: exit()函数学习
- 下一篇: 指针与数组名的关系