
#include <stdio.h>
int main()
{
int a[5] = {1, 2};
int b[] = {1, 2};
printf("a[2] = %dn", a[2]);
printf("a[3] = %dn", a[3]);
printf("a[4] = %dn", a[4]);
printf("sizeof(a) = %dn", sizeof(a));
printf("sizeof(b) = %dn", sizeof(b));
printf("count for a: %dn", sizeof(a)/sizeof(int));
printf("count for b: %dn", sizeof(b)/sizeof(int));
return 0;
}
數組位址與數組名
- 數組名代表數組首元素的位址
- 數組的位址需要取位址符&才能看到
- 數組首元素的位址 值和數組的位址值相同
- 數組首元素的位址與數組的位址是兩個不同的概念
#include <stdio.h>
int main()
{
int a[5] = { 0 };
printf("a = %pn", a);
printf("&a = %pn", &a);
printf("&a[0] = %pn", &a[0]);
return 0;
}
數組的盲點:
數組名可以看做一個常量指針
數組名“指向"的是記憶體中數組首元素的起始位置 數組名不含數組的長度資訊 在表達式數組名不能看做常量指針- 數組名作為sizeof操作符的參數
- 數組名作為&運算符的參數
執行個體3:
#include <stdio.h>
int main()
{
int a[5] = {0};
int b[2];
int* p = NULL;
p = a;
printf("a = %pn", a);
printf("p = %pn", p);
printf("&p = %pn", &p);
printf("sizeof(a) = %dn", sizeof(a));
printf("sizeof(p) = %dn", sizeof(p));
printf("n");
p = b;
printf("b = %pn", b);
printf("p = %pn", p);
printf("&p = %pn", &p);
printf("sizeof(b) = %dn", sizeof(b));
printf("sizeof(p) = %dn", sizeof(p));
b = a;
return 0;
}
小結:指針難就難在概念的不清晰
- 數組是一片連續的記憶體空間
- 數組的位址和數組首元素的位址意義不同
- 數組名在大多數情況下被當成常量指針的處理
- 數組名其實并不是指針,不能将其等同于指針
說明
1.該文檔僅供個人學習使用,版權所有,禁止商用。
2.本文由我一個人編輯并整理,難免存在一些錯誤。
3.為了友善大家平時公交、地鐵、外出辦事也能用手機随時随地檢視該教程,該教程同步更新于微信公衆号『
Allen5G』。
我的微信公衆号(ID:Allen5G)主要分享軟體工程師進階(嵌入式,Linux,C/C++,python,英語),程式員職業發展,如果想檢視更多内容,可以關注我的微信公衆号『Allen5G』