C語言 如何在函式體內,自動判斷傳入的陣列引數的長度。

時間 2021-05-09 10:34:41

1樓:飛著走的魚

裸陣列(內建)不可以判斷,陣列長度需要傳遞進去。(這算是C語言本身的一種風格)

要獲得可以判斷長度的陣列,需要自己設計陣列型別,用struct定義,並使用動態分配記憶體。

2樓:孔乙己

main函式的一般形式是 main(int argc, char argv)

argc就是後邊那個argv陣列的個數,連main函式都需要這樣顯示指出陣列個數,看來確實是沒好辦法。

3樓:李華

一般陣列作為函式引數的話,本質上都是傳入陣列首位址,只知道乙個位址是沒有辦法知道該位址後面有多少個有效資料的。比如,將陣列a作為引數傳入函式fun(),那麼就知道了陣列a的首位址是0x0061FD70,我們沒有辦法知道0x0061FD70位址後面的空間有沒有存資料。所以沒有辦法直接知道長度,我建議通過一些間接手段

1.可以定義乙個巨集或者全域性變數為某陣列的大小

#include

#define a_size 5

void fun(int a)

{ int i這裡可以直接呼叫a_size知道陣列a的大小

printf("a_size:%d\n",a_sizeprintf("陣列的內容為:");

for(i=0;i

只需要在函式內部呼叫a_size就可以知道陣列a大小長度了

2.給該函式新增多乙個引數size。

#include

void fun(int a,int size)

{ int i呼叫傳入的引數size知道陣列大小

printf("a_size:%d\n",sizeprintf("陣列的內容為:");

for(i=0;i

3.自己規定好乙個協議,比如陣列下標為0的元素存放陣列長度值,只用下標1以後的空間存放位置(一般很少這麼用,通常也是用第1,2種,看你需求)

#include

void fun(int a)

{ int i讀取a[0]知道陣列大小

int a_size = a[0];

printf("a_size:%d\n",a_sizea = a + 1; //陣列位址偏移

printf("陣列的內容為:");

for(i=0;i

4樓:宅學部落-王利濤

陣列作為函式的引數時,陣列名會隱式轉換為陣列首元素的位址,在函式體內是無法獲知陣列的長度資訊的,一般都要給函式增加乙個陣列的長度作為引數。

當然,你也可以將陣列長度這個引數封裝在陣列裡,但不建議這樣做,直接多個引數其實更直觀一些

C語言和C 中,為什麼malloc函式需要傳入申請的記憶體大小,而free時候卻不需要傳大小呢?

Hades 前面說書裡面說過,我忙猜,在申請記憶體的時候時間上申請的是乙個資料結構,包含頭部和可以位址資訊,free的時候去資料結構裡找就行了。比如裡要100記憶體,可能實際申請了110的記憶體多的就用來存放一些和記憶體相關的資訊了別。 白潔 多方面的因素 也許包括歷史因素 不存在對錯。c 的all...

c語言如何判斷乙個宣告到底是函式還是指標還是陣列還是什麼東西?

yuantj 從裡到外一步步看。設要求的型別為 T。第一步 找到識別符號名 T f第二步 注意到識別符號的左側有 符號,所以這是個指標 設被指型別為 F,則變成了 F f 第三步 識別符號的右側有 3 說明這是個含有 3 個指標的陣列 F f 3 第四步 外圍有函式指標的宣告,證明 F 是乙個函式型...

C語言中,對一段函式進行超時判斷,請問怎麼實現

不知道你具體要幹什麼,timeSetEvent過時了,有代替api。你提到setjmp和longjmp,我猜一下,可能是超時時,進入第三方dll的函式debug?不過這玩意有很多限制,彈窗報錯估計是碰到限制了。longjmp acebear 關鍵點 WaitForSingleObject大致用法是這...