我只是想通過&arrC 語言。
例如:
#include <stdio.h>
void test( PARAMETER??? )
{
return;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8};
test(&arr);
return 0;
}
我應該如何宣告引數?
因為它是型別int (*)[8]
我只是想通過&arrC語言。我知道我可以通過arr和length爭論,但我怎么能通過這個呢?
uj5u.com熱心網友回復:
因為它是型別
int (*)[8]
如果您想傳遞&arr,那么這正是您需要將引數宣告為的型別,例如:
void test(int (*param)[8])
{
// use param as needed...
}
uj5u.com熱心網友回復:
您可以在函式中傳遞具有陣列大小的陣列。但是您需要使用sizeof()來計算陣列的大小
#include <stdio.h>
void test( int arr[], size_t size_of_array )
{
return 0;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8};
size_t size_of_array = sizeof(arr)/sizeof(arr[0]); /* calculate of array size */
test(arr, size_of_array );
return 0;
}
uj5u.com熱心網友回復:
您不能將陣列作為引數傳遞。
您可以將指標傳遞給它的第一個元素:
#include <stdio.h>
void test( size_t n, int *p ) { // `p` is a pointer an `int`.
printf( "%zu\n", sizeof(p) ); // `sizeof( int* )`, 8 for me.
printf( "%zu\n", sizeof(*p) ); // `sizeof( int )`, 4 for me.
printf( "%d\n", p[0] ); // 1
printf( "%d\n", p[1] ); // 2
}
int main( void ) {
int arr[] = {1,2,3,4,5,6,7,8,9,10,11};
test( sizeof(arr)/sizeof(*arr), arr );
}
偽裝同樣的事情:
#include <stdio.h>
void test( size_t n, int p[n] ) { // `p` is a pointer an `int`.
printf( "%zu\n", sizeof(p) ); // `sizeof( int* )`, 8 for me.
printf( "%zu\n", sizeof(*p) ); // `sizeof( int )`, 4 for me.
printf( "%d\n", p[0] ); // 1
printf( "%d\n", p[1] ); // 2
}
int main( void ) {
int arr[] = {1,2,3,4,5,6,7,8,9,10,11};
test( sizeof(arr)/sizeof(*arr), arr );
}
最后,您可以將指標傳遞給陣列:
#include <stdio.h>
void test( size_t n, int (*p)[n] ) { // `p` is a pointer to an `int[11]`
printf( "%zu\n", sizeof(p) ); // `sizeof( int* )`, 8 for me.
printf( "%zu\n", sizeof(*p) ); // `sizeof( int[11] )`, 44 for me.
printf( "%d\n", (*p)[0] ); // 1
printf( "%d\n", (*p)[1] ); // 2
}
int main( void ) {
int arr[] = {1,2,3,4,5,6,7,8,9,10,11};
test( sizeof(arr)/sizeof(*arr), &arr );
}
無論如何,如果需要,您將需要傳遞陣列的大小,因為它不會存盤在陣列本身的任何位置。
uj5u.com熱心網友回復:
您可以將它直接(不是地址)傳遞給類似的函式
void test(int prm[restrict 8]);
它不允許通過int arr[7],并且允許通過int arr[9],但你不會知道陣列的大小,你所知道的,它的大小至少為 8。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/525460.html
標籤:C
