我正在從 freeCodeCamp.org 學習 C 指標,并且我被困在陣列指標上,因為函式引數緊隨其后。
在教練代碼是這樣的
int SumOfElement(int A[]) {
int i, sum = 0;
int size = sizeof(A)/sizeof(A[0]);
printf("SOE - Size of A = %d, size of A[0] = %d", sizeof(A), sizeof(A[0]));
for(i = 0; i<size; i )
{ sum = A[i];}
return sum;
}
int main() {
int A[]= {1,2,3,4,5};
int total = SumOfElements(A);
printf("Sum of elements %d\n",total);
printf("Main - Size of A = %d, size of A[0] %d",sizeof(A),sizeof(A[0]));
}
他的結果(來自感興趣的部分)是:
SOE - Size of A = 4
Main - Size of A = 20
我明白為什么會這樣。但是在我的代碼中,當我嘗試運行類似的代碼時,我從sizeof(A)函式內部列印得到 8
int myFunc(int a[]) {
printf("Size of a[] inside function is %d\n", sizeof(a));
return a;
}
int main(){
int a[] = {1, 2, 3, 4, 5};
myFunc(a); // Result is 8
printf("Size of a[] in main function is %d\n", sizeof(a)); // Result is 20
return 0;
}
uj5u.com熱心網友回復:
int A[]是一個陣列宣告,但由于它是函式引數串列的一部分,因此它被隱式調整為指向該陣列第一個元素的指標。
int SumOfElement(int A[])100% 等同于int SumOfElement(int* A)。
因此sizeof A在該函式內部做是沒有意義的,因為這樣做總是會給你指標的大小。在 32 位系統上通常是 4 個位元組,但在 64 位系統上是 8 個位元組。
同理,int size = sizeof(A)/sizeof(A[0]);是胡說八道。A當陣列衰減為指標時,您無法計算陣列大小。這為您提供了指標的大小除以int.
為了使這個函式有意義,它可能應該有一個單獨的size引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434170.html
下一篇:C中的指標轉換
