網(wǎng)頁(yè)網(wǎng)站制作維護(hù)百度聯(lián)盟廣告收益
一般情況下,數(shù)組名表示首元素地址,以下2種除外:
①、sizeof(數(shù)組名)? ? 表示整個(gè)數(shù)組? ?※只有數(shù)組名的情況
????????sizeof(數(shù)組名+i) 就不能表示整個(gè)數(shù)組
②、&數(shù)組名? ? ? ? ? ? ?表示整個(gè)數(shù)組,取的是整個(gè)數(shù)組的地址
int main()
{int arr[] = { 1,2,3,4,5 };int n = sizeof(arr);//整個(gè)數(shù)組int m = sizeof(arr + 1);//首元素地址+1,下一個(gè)元素地址,僅一個(gè)元素printf("%d\n", n);printf("%d\n\n", m);printf("%p\n", arr);//首元素地址printf("%p\n", arr + 1);//首元素往后一位的地址printf("%p\n", &arr[0]);//首元素地址printf("%p\n", &arr[0]+1);//首元素往后一位地址printf("%p\n", &arr);//全部元素的地址,只是只打印了首元素的printf("%p\n", &arr+1);//跳過(guò)整個(gè)數(shù)組后的第一個(gè)元素的地址return 0;
}
結(jié)果是:
20
4
00AFFE58
00AFFE5C
00AFFE58
00AFFE5C
00AFFE58
00AFFE6C
sizeof是計(jì)算()占了多少字節(jié)(byte)
可以看出,&arr 取的是整個(gè)數(shù)組的地址,怎么存放這么多地址呢?
用 數(shù)組指針 呀~
int (*p)[5]=&arr;
p和*先結(jié)合,表示p是指針,然后再結(jié)合[5]和int 表示是int[5]類(lèi)型的
指針配合數(shù)組
打印結(jié)果是多少呢?
解釋如下 👇
{int a[] = { 1,2,3,4 };printf("%d\n", sizeof(a));//16,整個(gè)數(shù)組的大小printf("%d\n", sizeof(a+0));//4或8 首元素地址printf("%d\n", sizeof(*a));//4 a是首元素地址,解引用找到首元素printf("%d\n", sizeof(a+1));//4或8 第二個(gè)元素的地址printf("%d\n", sizeof(a[1]));//4 第二個(gè)元素printf("%d\n", sizeof(&a));//【4或8】 &a是整個(gè)數(shù)組的地址,也是個(gè)地址//可以理解為,數(shù)組指針是4或8,它倆大小一樣printf("%d\n", sizeof(*&a));//16 整個(gè)數(shù)組 &a是整個(gè)數(shù)組的地址,解引用后,是整個(gè)數(shù)組//printf("%d\n", sizeof(&a+1));//【4或8】 也是個(gè)地址,跳過(guò)整個(gè)數(shù)組printf("%d\n", sizeof(&a[0]));//4或8 首元素地址printf("%d\n", sizeof(&a[0]+1));//4或8 第二個(gè)元素地址return 0;
}
🤗🤗🤗🤗🤗🤗🤗🤗🤗🤗