這幾天在看一個資料結構的視訊,看到有關形參和實參的問題,發現自己之前的很多了解都不太正确。
比如,我們周遊一個數組,我首先想到是這樣寫的:
int main()
{
int a[] = {1,2,3};
showArray(a);
}
void showArray(int *p){
int len = sizeof(p);
printf("len==%d\n",len);
int i = 0;
for (i = 0; i < len; i++){
printf("%d\n",p[i]);
}
}
結果輸出的值是:1,2,3,4200208。前3個值都正确,但是為什麼會多出一個4200208呢?問題就出在sizeof這個關鍵字上。sizeof是一個單目操作符,并不是一個函數,其值在編譯時确定。這裡的p,是一個指針變量,大小始終為4.是以最後會多出一個垃圾數字4200208。
可見,要周遊一個數組,單傳其首位址是不夠的,還需要知道它的大小。正确的程式如下:int main()
{
int a[] = {1,2,3};
int len = sizeof(a)/sizeof(int);
showArray(a,len);
}
void showArray(int *p,int len){
printf("len==%d\n",len);
int i = 0;
for (i = 0; i < len; i++){
printf("%d\n",p[i]);
}
}