在c語言中,經常使用sizeof取得陣列的長度。
int len=sizeof(arr)/sizeof(arr[0])
其實還有乙個技巧取得陣列的長度。再次之前,我們還是先了解一下兩個位址(或者指標)相減是乙個什麼樣的狀況吧。
先定義乙個int型別陣列和兩指向相鄰指標:
int a[5]=;
int* p1=&a[1];
int* p2=&a[2];
那麼&a[2]-&a[1]即p2-p1等於多少呢?也許你一眼就能看出來p2-p1=1,的確。可是把p1和p2的值輸出出來,也許你就會感到困惑:
printf("%p,%p\n",p1,p2);//%p用於輸出位址格式
output:
0028fe9c 0028fea0
也就是說p1的值為0028fe9c,p2的值為0028fea0,p1和p2相差4個位元組。可為什麼p2-p1=1呢?這不是矛盾了嘛~~~
首先,計算機跟人類一樣,算出位址差值4.
然後,根據指標型別確定元素所佔記憶體大小,這裡int佔4byte
那麼,p2-p1=4/4=1.
現在可以說說怎麼不用sizeof求出陣列的長度了。
首先,取乙個指標a,我們知道陣列的名字就是乙個指標。
再取乙個指標的指標&a,&a指向a,a又指向陣列a[5],所以&a所指元素佔記憶體大小20(4*5),所以,&a+1與&a的位址差值為20.
printf("%p,%p\n",&a,a);
*(&a+1)-a=20/4=5,哈哈,陣列的長度。
驗證:
printf("len=%d",*(&a+1)-a);
所以,求乙個陣列的長度除了使用sizeof之外,我們還可選擇這個方法。
這只是另外乙個技巧而已,並不代表我推薦使用這個方法。不過我們也能看出c語言之能力,是其他高階語言所不及的。
C 取得陣列長度
c 中沒有提供 直接獲取陣列長度的函式,對於存放字串的字元陣列提供了乙個strlen函式獲取長度,那麼對於其他型別的陣列如何獲取他們的長度呢?其中一種方法是使 用sizeof array sizeof array 0 在c語言中習慣上在 使用時都把它定義成乙個巨集,比如 define get arr...
使用sizeof()計算陣列長度
char words 計算word中元素個數 size t words size sizeof words sizeof char 使用陣列初始化words2 指標初始化 list words2 words,words words size 解析 1 sizeof sizeof操作符返回乙個物件或型...
sizeof()與 陣列長度獲取
獲取陣列長度 函式通過引數傳入乙個陣列的指標,如何獲取該陣列的長度?如 int find int array,int key 其中array的長度如何獲取?用過sizeof array sizeof int 但是結果不對,始終是1 滿意回答 int mylen int buf int main vo...