摘要:首先,我們先要了解數組名的意義數組名的意義數組名,這里的數組名表示整個數組,計算的是整個數組的大小。數組名,這里的數組名表示整個數組,取出的是整個數組的地址。這里對于二維數組同樣適用。
首先,我們先要了解數組名的意義:
數組名的意義:
#include int main(){ int a[] = { 1,2,3,4 }; printf("%d/n", sizeof(a)); //16 //數組名a多帶帶放在sizeof內部,數組名表示整個數組,計算的是整個數組的大小 printf("%d/n", sizeof(a + 0));//4/8 //a表示首元素的地址,a+0還是首元素的地址,地址的大小是4/8字節 printf("%d/n", sizeof(*a)); //4 //a表示首元素的地址,*a 就是首元素 ==> a[0] ,大小就是4 //*a <==> *(a+0) <==> a[0] printf("%d/n", sizeof(a + 1));//4/8 //a表示首元素的地址,a+1是第二個元素的地址,大小就是4/8 printf("%d/n", sizeof(a[1]));//4 //a[1] 就是第二個元素 - 4 printf("%d/n", sizeof(&a)); //4/8 //&a - 數組的地址 - 4/8 - int(*)[4] printf("%d/n", sizeof(*&a)); //*&a - &a是數組的地址,對數組的地址解引用拿到的是數組,所以大小是16 //printf("%d/n", sizeof(a));//16 printf("%d/n", sizeof(&a + 1));//4/8 // &a是數組的地址,&a+1 是數組的地址+1,跳過整個數組,雖然跳過了數組, //還是地址 4/8 printf("%d/n", sizeof(&a[0]));//4/8 printf("%d/n", sizeof(&a[0] + 1));//第二個元素的地址 4/8 return 0;}
再來看一組字符數組:
int main(){ char arr[] = { "a", "b", "c", "d", "e", "f" }; printf("%d/n", sizeof(arr));//6 //數組名表示整個數組,計算的是整個數組的大小 printf("%d/n", sizeof(arr + 0));//4/8 //數組名是首元素的地址,arr+0還是首元素的地址 printf("%d/n", sizeof(*arr));//1 首元素的大小。 printf("%d/n", sizeof(arr[1]));//1 數組第2個元素的大小 printf("%d/n", sizeof(&arr));//4/8 //數組名表示整個數組,取出的是整個數組的地址 printf("%d/n", sizeof(&arr + 1));//4/8 &arr + 1跳過整個數組的地址 printf("%d/n", sizeof(&arr[0] + 1));//4/8 數組第二個元素的地址 printf("%d/n", strlen(arr));//隨機值 //strlen-是庫函數,求的是字符串長度 printf("%d/n", strlen(arr + 0));//隨機值 //printf("%d/n", strlen(*arr));//*arr - "a" - 97 - err //strlen就以為傳進來的"a"的ascii碼值97就是地址 //printf("%d/n", strlen(arr[1]));//"b" - 98 - err printf("%d/n", strlen(&arr));//隨機值 //char(*)[6] printf("%d/n", strlen(&arr + 1));//隨機值 printf("%d/n", strlen(&arr[0] + 1));//隨機值 return 0;}
int main(){ char arr[] = "abcdef"; printf("%d/n", sizeof(arr));//7 字節 printf("%d/n", sizeof(arr + 0));//arr是首元素的地址。arr+0還是首元素的地址 4/8 printf("%d/n", sizeof(*arr));//arr是首元素的地址,*arr就是首元素 1 printf("%d/n", sizeof(arr[1]));//arr[1]就是第二個元素 1 printf("%d/n", sizeof(&arr));//&arr 是數組的地址,數組的地址也是地址,就是4/8字節 printf("%d/n", sizeof(&arr + 1));//&arr 是數組的地址,&arr+1 是跳過整個數組后的地址 4/8 printf("%d/n", sizeof(&arr[0] + 1));//&arr[0] + 1 是第二個元素的地址,4/8 printf("%d/n", strlen(arr));//6 整個數組的長度 printf("%d/n", strlen(arr + 0));//6 arr+0是首元素的地址 //printf("%d/n", strlen(*arr));//err //printf("%d/n", strlen(arr[1]));//err printf("%d/n", strlen(&arr));//6 &arr-整個數組的地址 printf("%d/n", strlen(&arr + 1));//隨機值 printf("%d/n", strlen(&arr[0] + 1));//5 &arr[0] + 1-第2個元素的地址 return 0; }
int main() { const char* p = "abcdef"; printf("%d/n", strlen(p));//6 printf("%d/n", strlen(p + 1));//5 //printf("%d/n", strlen(*p));//err //printf("%d/n", strlen(p[0]));//err printf("%d/n", strlen(&p));//隨機值 printf("%d/n", strlen(&p + 1));//隨機值 printf("%d/n", strlen(&p[0] + 1));//5 printf("%d/n", sizeof(p));//p是一個指針變量 4/8 printf("%d/n", sizeof(p + 1));//p+1 是字符b的地址 4/8 printf("%d/n", sizeof(*p));//1 printf("%d/n", sizeof(p[0]));// 1 p[0]-->*(p+0) --> *p 1 printf("%d/n", sizeof(&p));//4/8 printf("%d/n", sizeof(&p + 1));//4/8 printf("%d/n", sizeof(&p[0] + 1));//4/8 return 0; }
最后,再來看一組二維數組:
int main(){ int a[3][4] = { 0 }; printf("%d/n", sizeof(a)); //48 12x4 printf("%d/n", sizeof(a[0][0]));//4 數組第一個元素的大小 printf("%d/n", sizeof(a[0]));// 16 //a[0]表示第一行的數組名,數組名多帶帶放在sizeof內部,計算的是第一行整個數組的大小 printf("%d/n", sizeof(a[0] + 1));//4/8 //a[0]表示第一行的數組名,沒有多帶帶放在sizeof內部,也沒有&,所以arr[0]表示首元素地址 //所以 就是第一行這個數組第一個元素的地址 //a[0] + 1,就是第一行第2個元素的地址 printf("%d/n", sizeof(*(a[0] + 1)));//4 就是第一行第二個元素 printf("%d/n", sizeof(a + 1));//4/8 //數組名a并沒有多帶帶放在數組內部,也沒有&。所以a表示首元素(第一行)地址 //所以a+1,就是第二行地址 //int(*)[4] printf("%d/n", sizeof(*(a + 1)));//16 *(a+1)就是整個第二行 //*(a + 1)-->a[1] printf("%d/n", sizeof(&a[0] + 1));//4/8 //&a[0]拿到的是第一行的地址,&a[0] + 1就是第二行的地址 printf("%d/n", sizeof(*(&a[0] + 1)));//16 整個第二行 printf("%d/n", sizeof(*a));//16 //a表示首元素的地址,就是第一行的地址,*a就是第一行-第一行的數組名 printf("%d/n", sizeof(a[3]));//16 //a[3]假設存在,就是第四行的數組名,sizeof(a[3])就相當于把第四行的數組名多帶帶放在sizeof內部 return 0;}
對于上面這個二維數組:a就是二維數組的數組名,第一行的數組名是a[0],第二行的數組名是a[1],第三行的數組名是a[2]。
1.sizeof(數組名),這里的數組名表示整個數組,計算的是整個數組的大小。
2. &數組名,這里的數組名表示整個數組,取出的是整個數組的地址。
這里對于二維數組同樣適用。
&a:二維數組首元素(第一行)的地址
&a[0]:第一行第一個元素的地址
&a[1]:第二行第一個元素的地址
&a[2]:第三行第一個元素的地址
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119111.html
摘要:寫在前面博客主頁的江湖背景的江湖背景歡迎關注點贊收藏留言本文由原創,首發首發時間年月日最新更新時間年月日堅持和努力一定能換來詩與遠方向未見花聞學習參考書籍深入理解計算機系統作者水平很有限,如果發現錯誤,請留言轟炸哦萬分感謝感謝感謝 ?寫在前面 ?博客主頁:kikoking的江湖背景?...
摘要:最后重點理解結論箭頭函數的,總是指向定義時所在的對象,而不是運行時所在的對象。輸出,箭頭函數不會綁定所以傳入指向無效。原因是,要徹底理解應該是建立在已經大致理解了中的執行上下文,作用域作用域鏈,閉包,變量對象,函數執行過程的基礎上。 本文共 2025 字,看完只需 8 分鐘 概述 前面的文章講解了 JavaScript 中的執行上下文,作用域,變量對象,this 的相關原理,但是我...
摘要:語言在設計中考慮了函數的高效性和易用性兩個原則。在語言中,最常見的當屬函數了。以上就是一個函數,它被稱為語言的入口函數,或者主函數。例如和都是函數名。形式參數當函數調用完成之后就自動銷毀了。 ...
閱讀 2109·2023-04-26 00:50
閱讀 2478·2021-10-13 09:39
閱讀 2200·2021-09-22 15:34
閱讀 1605·2021-09-04 16:41
閱讀 1335·2019-08-30 15:55
閱讀 2433·2019-08-30 15:53
閱讀 1706·2019-08-30 15:52
閱讀 747·2019-08-29 16:19