2016-05-25 50 views
-1

我是新來的stackoverflow和C,我有一個問題。我需要編寫一個程序來迭代數組,然後將內容解引用爲零。出於某種原因,我的「zero_out_array」只會將我的數組中的第一個數字更改爲零,而不是其他數字。這裏是我的代碼,任何幫助表示讚賞。想要將我的數組內容設置爲零。只有數組中的第一個數字更改爲零

#include <stdio.h> 

void print_array(int* p_array, int num_elements) 
{ 
    printf("print_array called:\n"); 

    for (int i = 0; i < num_elements; i++) 
    { 
     printf("%d \n", p_array[i]); 
    } 
} 

void zero_out_array(int* p_array, int num_elements) 
{ 
    printf("zero_out_array called:\n"); 

    *p_array = 0; 

    for (int j = 0; j < num_elements; j++) 
    { 
     printf("%d \n", p_array[j]); 
    } 
} 

int main() 
{ 
    int main_array[] = { 15, 24, 33, 42, 51 }; 

    print_array(main_array, 5); 

    zero_out_array(main_array, 5); 

    return 0; 
} 
+3

'* p_array = 0;'僅引用數組的第一個元素。 –

回答

0

請考慮如下修改代碼:

#include <stdio.h> 

void print_array(int* p_array, int num_elements) 
{ 
    printf("print_array called:\n"); 

    for (int i = 0; i < num_elements; i++) 
    { 
     printf("%d \n", p_array[i]); 
    } 
} 

void zero_out_array(int* p_array, int num_elements) 
{ 
    printf("zero_out_array called:\n"); 

    *p_array = 0; 

    for(int j = 0; j < num_elements; j++) 
     *(p_array+j)=0; 

    for (int j = 0; j < num_elements; j++) 
    { 
     printf("%d \n", p_array[j]); 
    } 
} 

int main() 
{ 
    int main_array[] = { 15, 24, 33, 42, 51 }; 

    print_array(main_array, 5); 

    zero_out_array(main_array, 5); 

    return 0; 
} 

在上面的代碼,我已經添加了額外的for循環:

for(int j = 0; j < num_elements; j++) 
     *(p_array+j)=0; 

*p_array僅指向的第一個元素數組,所以我使用了for循環來更改所有元素。通過執行*(p_array+j)=0,我迭代訪問所有數組元素並使它們爲0.

2

對於任何指針或數組p和索引i表達p[i]*(p + i)是相同的。現在

如果該索引是0那麼我們有p[0]這是爲*(p + 0)相同,*(p + 0)是一樣的*(p)這是一樣的*p。也就是說,如果你有一個指針並對它進行解引用,那麼你將得到指針所指向的內容,例如指針所指向的數組中的第一個元素。

如果要將數組中的所有元素設置爲零,您有兩個選擇:使用顯式循環並將每個元素設置爲零。或者,由於您有整數數組,因此您可以使用memset將數組中的每個和每個字節設置爲零。

使用memset你可以做例如

memset(p_array, 0, sizeof(*p_array) * num_elements); 
相關問題