先來個簡單的樣例
int a[] = {1,2,3};
int arr_len = 0;
arr_len = sizeof(a)/sizeof(int);
解釋:sizeof() keyword是求出對象所占用的內存空間的大小,so, sizeof(a)是算出整個數組占用的空間的大小。
由於是整數數組。一個整數在32位系統上占用4個字節,不同的系統數值可能不同, 用sizeof(int)能夠計算出
一個整數占用的內存空間大小。所以用sizeof(a)/sizeof(int)數組中有幾個整數,也即算出了數組的大小。
下邊來個指針數組
char *str[] = {"John", "Jim"};
int str_len = 0;
str_len = sizeof(str)/sizeof(char*);
指針數組顧名思義數組中存放的都是指針。字符指針。
我們能夠用char *p = "I'm a worker.";
指向一個字符串常量,而把這些指針放在一起不就是上邊說的指針數組嗎。也許我們用
char* str[]更能顯示的看出上邊是指針數組。
既然是指針數組那sizeof(str)不就是幾個指針占用的空間大小嘛。那除以一個指針所
占用的空間大小不就能夠計算出字符指針數組的大小了。
把上邊的樣例變下
char str[][20] = {"John", "Jim"};
int str_len = 0;
str_len = sizeof(str)/20*sizeof(char);
字符指針數組變成了字符的二維數組。
二維動態數組我們能夠看成一個行不固定,列固定(20)的一個表。
我們所要計算的就是有幾行。sizeof(str)就是計算出這個表占用的總空間的大小,
總空間的大小除以一行占用的空間大小就能夠計算出有幾行。那一行占用多大空間呢。我們知道一個單元格中存放的是一個char字符sizeof(char)就能夠計算出一個單元格所占用的空間大小。那乘以列數(20)就算出一行占用空間的大小了。