傳遞數組的大小據我所知,在編譯時計算和替換了一個常量的運算符。既然如此,一個函數在程序中的不同點被傳遞給不同的數組,它的大小如何計算?我可以將它作為參數傳遞給函數,但是如果我沒有必要添加另一個參數的話,我寧愿不必添加另一個參數。這里有一個例子來說明我要問的問題:#include <stdio.h>#include <stdlib.h>#define SIZEOF(a) ( sizeof a / sizeof a[0] )void printarray( double x[], int );int main(){
double array1[ 100 ];
printf( "The size of array1 = %ld.\n", SIZEOF( array1 ));
printf( "The size of array1 = %ld.\n", sizeof array1 );
printf( "The size of array1[0] = %ld.\n\n", sizeof array1[0] );
printarray( array1, SIZEOF( array1 ) );
return EXIT_SUCCESS;}void printarray( double p[], int s ){
int i;
// THIS IS WHAT DOESN"T WORK, SO AS A CONSEQUENCE, I PASS THE
// SIZE IN AS A SECOND PARAMETER, WHICH I'D RATHER NOT DO.
printf( "The size of p calculated = %ld.\n", SIZEOF( p ));
printf( "The size of p = %ld.\n", sizeof p );
printf( "The size of p[0] = %ld.\n", sizeof p[0] );
for( i = 0; i < s; i++ )
printf( "Eelement %d = %lf.\n", i, p[i] );
return;}
3 回答

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
顯然,添加一個參數 將調用包裝在宏中并自動添加參數 使用更復雜的對象。定義一個包含動態數組以及數組大小的結構。然后,傳遞結構的地址。

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
void printarray( double p[], int s )
void printarray( double p[100], int s )
void printarray( double* p, int s )
sizeof(p)
sizeof(double*)

手掌心
TA貢獻1942條經驗 獲得超3個贊
sizeof
&
T
T
printarray
array1
double
double
p
double *
double [100]
.
T a[]
T *a
.
- 3 回答
- 0 關注
- 433 瀏覽
添加回答
舉報
0/150
提交
取消