不使用sizeof求得陣列長度

2021-06-26 17:43:19 字數 1025 閱讀 5222

在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...