sizeof是一個操作符,不是函數;
而strlen是一個庫函數;
sizeof是計算所占內存空間的,不管你內容是什么,只要知道占多少內存,
而strlen是跟內容有關的,它是計算字符串長度的(字符數組也是可以的),其核心是統計字符串中'/0'前有多少字符,一定要找'/0',所以它要關注內容,
下面我們通過幾道題來講解,
這里的4/8所代表的是地址在不同編譯器下所占字節不同,有的是4,有的是8
驗證一下輸出,
下面這個代碼大家來練習一下,
char arr[] = { 'a','b','c','d','e','f' };printf("%d\n", sizeof(arr));printf("%d\n", sizeof(arr + 0));printf("%d\n", sizeof(*arr));printf("%d\n", sizeof(arr[1]));printf("%d\n", sizeof(&arr));printf("%d\n", sizeof(&arr + 1));printf("%d\n", sizeof(&arr[0] + 1));
第一個很簡單,計算的是整個數組所占字節數,即6,
第二個arr代表的是首元素地址,+0代表首元素地址的大小,即4/8
第三個對arr首元素地址解應用,就是在問a[0]所占字節大小,即1,
第四個arr[1]是第二個元素,即1
第五個&arr代表的是整個數組的地址,也是地址,即4/8
第六個&arr+1是跳過整個數組后的地址,也是地址,即4/8
第七個&arr[0]是首元素地址,首元素地址加一也是地址,就是4/8
下面我們來看strlen,同樣通過題目來講解,