C語言的那些坑(陣列做引數計算大小問題)

2021-08-11 07:09:14 字數 738 閱讀 8909

零一匠 c語言的那些坑 之 第乙個坑(陣列做函式引數問題)

看下面的**

int hole(int numarray)

int main()

; len = sizeof(numarray) / sizeof(int);

printf("main函式計算的陣列長度是%d\n", len);

hole(array);

}

曾經幼稚的我認為兩個函式輸出的陣列大小是一樣的。但實際情況是hole計算的大小是1,main計算的大小是11。因為函式的陣列引數相當於指向該陣列第乙個元素的指標。這意味著把陣列傳遞給函式的效率非常高,也意味著程式並不知道陣列有多大。

然後自作聰明的我這樣寫了

int hole(int numarray[11])
這不就知道陣列的大小了嗎。然而實際情況是執行結果和上面的一樣。

實際上下面三種形式的寫法效果是一樣的。

int hole(int numarray[11]);

int hole(int numarray);

int hole(int

*numarray);

所以解決這類問題最好的辦法就是將函式定義成如下形式

int hole(int numarray, int

len);

陣列做引數 C語言高階之路 函式 陣列引數!

陣列引數屬於指標引數.指標引數即時傳址引數 或叫引用引數 如果想在函式中修改引數的值,這是唯一的途徑.如果把陣列當作引數,不管你願意與否,它就是指標,指向第乙個值的指標.1.陣列引數就是指向第乙個元素的指標 2.乾脆直接宣告為指標 3.即使你在形參中指定維數也不起作用 4.既然是指標,其值就有被修改...

那些年C語言走過的坑

在c語言中,多個表示式可以用逗號分開,其中用逗號分開的表示式的值分別結算,但整個表示式的值是最後乙個表示式的值。例如 int a1,a2,b 2,c 7,d 5 a1 b,c d a2 b,c d 其中第 2,3行就是使用了逗號運算子。但是這兩個表示式表達的意思不盡相同。逗號運算的結合性是從左至右,...

C語言read函式的那些坑

今天在複習unix檔案系統,用到那個read函式,但是無意中卻掉到乙個坑里了,用了乙個多小時才找到問題根源,這裡記錄一下。問題是這樣的 我需要使用read和write函式把鍵盤輸入的資訊複製到輸出。所以我寫了如下程式 include define maxsize 10 int main void 輸...