2016-03-30 53 views
0

我有哪裏指針到一個結構數組聲明傳遞指針數組到結構到功能

void functionA(argument1, argument2) { 
    ... 
    struct1 *point[2]; 
    ... 

    functionB(*point, ...) // Call the function ? 
} 

// Declare the function ? 
void functionB(struct1 *point[], ...) { 


} 

的功能,我需要這個數組*point[2]傳遞給另一個函數說functionB,我需要以一些基於point[0]point[1]的操作,這樣做的正確方法是什麼?

當我打電話functionAfunctionBfunctionB(*point, ...),我得到不兼容的指針類型的,而當我調用它像functionB(*point[], ...)我得到的錯誤,以前預期表達]令牌錯誤。

+2

你試過了functionB(point)嗎? –

+0

我建議你在'functionB'的參數聲明中替換'struct1 * point []',並用'struct1 ** point'替換爲**而不是**在函數內執行'sizeof(point)'這樣的錯誤,因爲這將無法正常工作。你可以傳遞一個數組作爲參數,然而它會被「表示(不記得正確的術語)」到被調用函數中的指針(指向第一個數組項)。如果你在一個函數中聲明一個數組,你可以在該範圍內的數組上做'sizeof'。這就是爲什麼它可能會產生誤導。 – Jite

+0

@Jite沒有理由在這裏使用指針指針。 – Lundin

回答

2

你的函數調用是錯誤的。 functionB正在等待struct1 **類型的參數,但您傳遞的是類型爲struct1 *的參數。函數調用應

functionB(point, ...); 

你應該知道,的每個C規則,當一個數組傳遞給一個函數,那麼數組衰變爲指針,它是第一要素。函數調用中的point將衰減並在衰減後具有類型struct1 **

+0

如果此答案有任何錯誤,將不勝感激。 – haccks

+0

一切工作正常與您的解決方案! –

-2

這裏是做這件事的一種方法:

void functionA(argument1, argument2) { 
    ... 
    struct1 *point[2]; 
    ... 

    functionB(point, ...) // Call the function ? 
} 

// Declare the function ? 
void functionB(struct1 ** point, ...) { 

    // Use point[1] and point[2] here 
} 
+0

'functionB(struct1 ** point, ...)'和'functionB(struct1 * point [],...)'意味着什麼?因爲它們都是指向指針的指針 –

+0

是的。兩者與功能參數相同。 – haccks

-2

當你需要向一個函數發送一個數組時,你只需要將該數組的基地址(即名稱)發送給該函數,然後使用指向該類型的指針接收它。此規則適用於每種數據類型,無論是int還是struct


所以,你可以做

void functionA(argument1, argument2) { 
    ... 
    struct1 *point[2]; 
    ... 

    functionB(point, ...) // Sending base address of array point 
} 

// Recieve it this way 
void functionB(struct1 *point[], ...) { 

// Or 
void functionB(struct1 **point, ...) { 
-2

功能functionB被聲明爲類型struct1 *point[]

void functionB(struct1 *point[], ...) { 


} 

的第一個參數,point具有相同類型元素的數組。

所以你只需要作爲參數使用數組的名稱爲函數調用

functionB(point, ...) // Call the function ? 

考慮到作爲陣列adjucted爲指針,以他們的元素參數中聲明帳戶。

因此這個函數聲明

void functionB(struct1 *point[], ...); 

void functionB(struct1 **point, ...); 

是等價的,聲明相同的一個功能。

另一方面,在表達式中使用的數組指示符被轉換爲指向其第一個元素的指針。因此,用作參數的表達式point被轉換爲struct1 **類型的指針,這與它根據其聲明所預期的函數參數完全相符。