網(wǎng)站建設(shè)招標(biāo)公告首頁排名關(guān)鍵詞優(yōu)化
目錄
1.數(shù)組的地址
?2.通過指針訪問數(shù)組
3.數(shù)組和指針的不同點(diǎn)
?4.指針數(shù)組
1.數(shù)組的地址
數(shù)組的地址是什么?
看下面一組代碼
#include <stdio.h>
int main()
{
int arr[5] = {5,4,3,2,1};
printf("&arr[0] = %p\n", &arr[0]);
printf("arr = %p\n", arr);
return 0;
}
?運(yùn)行結(jié)果:
從上面代碼中可以看到數(shù)組名和首元素的地址和是一樣的
但是有不同的情況
舉例:
#include <stdio.h>
int main()
{int arr[6] = { 5,4,3,2,1,0 };printf("&arr[0] = %p\n", &arr[0]);printf("&arr[0]+1 = %p\n\n", &arr[0]+1);printf("arr = %p\n", arr);printf("arr+1 = %p\n\n", arr+1);printf("&arr = %p\n", &arr);printf("&arr+1 = %p\n\n", &arr+1);return 0;
}
運(yùn)行結(jié)果
可以看到當(dāng)對&arr[0],arr,&arr都+1時,&arr[0]和arr都移動了4個字節(jié),而&arr移動了16個字節(jié)也就是整個數(shù)組的長度。
實(shí)際上除了&數(shù)組名表示整個數(shù)組的地址,在使用sizeof(數(shù)組名)計算數(shù)組的字節(jié)數(shù)時時,sizeof中的數(shù)組名表示的也是整個數(shù)組的地址。
總結(jié):數(shù)組名表示的是數(shù)組首元素的地址,但有兩個例外:
1.&數(shù)組名
這里的數(shù)組名實(shí)際上表示的是整個數(shù)組的地址
2.sizeof(數(shù)組名)
這里的數(shù)組名也表示整個數(shù)組的地址,計算的是整個數(shù)組的字節(jié)數(shù)。
?2.通過指針訪問數(shù)組
#include <stdio.h>
int main()
{int arr[5] = { 0,1,2,3,4, };int i = 0;int n = 100;int* p = arr;for (i; i < 5; i++)//通過指針p給數(shù)組重新賦值{*p = n;n++;p ++;}for (i = 0; i < 5; i++)//打印數(shù)組每個元素{printf("%d ", arr[i]);}return 0;
}
運(yùn)行結(jié)果:
可以看到數(shù)組的值可以通過指針被改變
把代碼稍作修改:
#include <stdio.h>
int main()
{int arr[5] = { 0,1,2,3,4, };int i = 0;int n = 100;int* p = arr;for (i; i < 5; i++)//通過指針p給數(shù)組重新賦值{*p = n;n++;p++;}for (i = 0; i < 5; i++)//打印地址{printf("&arr[i] =%d\np+i =%d\n", &arr[i],p+i);}return 0;
}
運(yùn)行結(jié)果:?
?
?可以看到arr[i]的地址就是指針變量p+1的地址,這也是通過指針更改變數(shù)組的每一個元素的原因
3.數(shù)組和指針的不同點(diǎn)
int arr[10];
int * p = arr:
p = arr;
//ok
?當(dāng)給p進(jìn)行賦值時程序會正常執(zhí)行
int arr[10];
int brr[10];
arr = brr;
//err
?當(dāng)給函數(shù)名賦值時程序會報錯
總結(jié):賦值表達(dá)式的左操作數(shù)不能是數(shù)組名,但可以是指針變量。
?4.指針數(shù)組
指針數(shù)組就是存放指針的數(shù)組
例如:
#include <stdio.h>
int main()
{int a = 0;int* p = &a;int* pp = &a;int* ppp = &a;int arr[3] = { *p,*pp,*pp };printf("%d %d %d\n", arr[0], arr[1], arr[2]);return 0;
}
運(yùn)行結(jié)果:
?
通過上面的代碼可以看到通過指針數(shù)組的元素,也能訪問到指針指向的變量。
?注意:指針數(shù)組是數(shù)組,而數(shù)組指針是指針
指針數(shù)組是存放指針的數(shù)組,數(shù)組指針是指向數(shù)組的指針。