2014-02-12 29 views
1

這是我的程序的示例代碼。作爲一個函數的數組的雙指針

我有一個函數名爲function這是用來返回一個整數值和整數數組。我必須通過它們作爲指針(function的簽名不能更改)。所以我寫了下面的代碼。在這裏,我必須將值分配給傳遞給函數的雙指針。

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    //array[i] = (unsigned int*)i*10; 
    } 
    *count = 4; 
} 

int main() 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    function(&count, (unsigned int**)&array2); 

    return 0; 
} 

但上述代碼不起作用。

+3

您的程序不會產生任何可觀察的輸出。它怎麼能證明你的問題?在某些時候,你必須**測試**看看它是否有效。 –

+0

我的主要需求是使用指定的值在函數'function'中填充數組'array2'。我在VS中調試代碼來檢查它是否正常工作。 –

回答

2

通過重用的概念,我想你已經知道了,你可以使用一個指向數組的第一個元素,然後通過指針的地址給函數

這樣一來,你將有一個雙指針到一個unsigned int這是數組的第一個元素:

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    (*array)[i] = i*10; // WATCH OUT for the precedence! [] has higher precedence! 
    } 
    *count = 4; 
} 

int main(int argc, char* argv[]) 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    unsigned int *pointer_to_array = &array2[0]; 
    function(&count, (unsigned int**)&pointer_to_array); 

    return 0; 
} 

一點題外話:

如果你可以更改簽名這會更有意義:

void function(unsigned int* count, unsigned int * array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    array[i] = i*10; 
    } 
    *count = 4; 
} 

int main(int argc, char* argv[]) 
{ 

    unsigned int count; 
    unsigned int array2[4]; 
    function(&count, array2); 

    return 0; 
} 

上述工作的原因是因爲當你將一個數組傳遞給一個函數(直接或通過一個顯式指針指向該數組),它本質上就成爲一個指針。這被稱爲陣列衰減

+2

他不允許明顯改變函數簽名(詳見問題) - 可能是作業? –

+1

謝謝保羅,我錯過了那一個! –

+1

@ Paul:您的評論似乎很有趣,無論如何感謝您的支持 –

0

要分配給由指針傳遞的數組,首先對其進行解引用,然後分配值。

void function(unsigned int* count, unsigned int ** array) 
{ 
    for(unsigned int i = 0; i<4;i++) 
    { 
    (*array)[i] = i*10; 
    } 
    *count = 4; 
} 
1
void function(unsigned int* count, unsigned int ** array){ 
    for(unsigned int i = 0; i<4;i++){ 
     (*array)[i] = i*10; 
    } 
    *count = 4; 
} 

int main(){ 
    unsigned int count; 
    unsigned int array2[4]; 
    unsigned int *p = &array2[0]; 
    function(&count, &p); 
    return 0; 
}