2013-06-27 149 views
0

我有以下代碼:sizeof運算指針陣列

typedef struct 
{ 
int a; 
int b; 
} Hello; 

typedef struct 
{ 
char c; 
int d; 
} World; 

Hello hello[10][10]; 
World world[5]; 

然後我有以下功能:

void getInfo(Hello hello_p[][10], World* world_p) 
{ 
    // Here I suppose to get the size of pointer to the array of hello and world 
    sizeof(hello_p); 
    sizeof(world_p); 
} 

void getHello(Hello (** hello_p)[10]) 
{ 
    hello_p = hello; 
} 

void getWorld(World ** world_p) 
{ 
    world_p = world; 
} 

然後我調用函數等:

Hello (*hello_p)[10]  = NULL; 
World *world_p = NULL; 


getHello(&hello_p); 
getWorld(&world_p); 

getInfo(hello_p, world_p); 

那麼在getInfo函數中,我可以獲得指向helloworld數組指針的大小嗎?

+0

不,所有的指針是相同的大小,和一個指針的大小,而不是陣列。 –

回答

1

當一個數組傳遞給一個函數時,ID衰減到一個指針並且大小信息丟失。

在這裏,你所得到的指針

sizeof(hello_p); 
sizeof(world_p); 

如果你想有關於它的大小信息,您將需要一個額外的參數傳遞給函數的大小。

0

我能得到的指針來打招呼和世界的數組的大小?

指針的大小對於任何類型都應該是相同的。所以指向Hello*World*的指針的大小應該與int*(例如)相同。