零一匠 c語言的那些坑 之 第乙個坑(陣列做函式引數問題)
看下面的**
曾經幼稚的我認為兩個函式輸出的陣列大小是一樣的。但實際情況是hole計算的大小是1,main計算的大小是11。因為函式的陣列引數相當於指向該陣列第乙個元素的指標。這意味著把陣列傳遞給函式的效率非常高,也意味著程式並不知道陣列有多大。int hole(int numarray)
int main()
; len = sizeof(numarray) / sizeof(int);
printf("main函式計算的陣列長度是%d\n", len);
hole(array);
}
然後自作聰明的我這樣寫了
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 輸...