2013-04-20 102 views
-3
#include<stdio.h> 
void func(int x[]); 
main() 
{ 
    int a[]={1,2,3,4}; 
    printf("size of %d \n",sizeof(a)); // Some value I'm getting 
    func(a); 
} 
void func(int a[]) 
{ 
    printf("size of %d",sizeof(a)); // Value is changing 
} 

這兩次,'a'的值都不一樣。爲了通過維護這些代碼來獲得相同的價值,還需要添加哪些代碼或需要進行哪些更改?爲什麼我會得到不同的「a」值。要獲得相同的價值,需要做些什麼?

我不想更改任何函數的簽名。在不更改簽名的情況下,需要在func(int a[])內添加哪些額外的代碼?

回答

4

數組函數參數衰減到指針,也就是說,參數funcint*類型。因此,您只能在func內計算sizeof(int*)

如果要傳遞數組大小,既可以將其傳遞作爲單獨的參數

func(a, sizeof(a)/sizeof(a[0])); 
.... 
void func(int* a, int num_elems); 

或初始化a包括一個標記值的標記陣列端,並通過元素迭代,直到找到該值在func

+0

嗨,我不想改變任何功能的簽名。請在不改變簽名的情況下說我需要在func()中添加額外的代碼。 – 2013-04-20 13:43:09

+0

最常用的方法是更改​​函數簽名。如果你真的無法做到這一點(比如說,因爲它對家庭作業的限制),你必須嘗試我的答案的第二部分提到的哨兵值方法。選擇一個永遠不會出現在數組中的值,並將最後一個值設置爲這個值。然後'func'可以迭代數組元素,直到找到一個帶有這個標記值的值。請注意,在調用'func'之前,所有數組元素都必須初始化,以便可靠地工作。 – simonc 2013-04-20 19:01:15

相關問題