2012-05-07 205 views
0

內容我有這樣的代碼非常簡單:打印陣列在C

#include <stdio.h> 
#include <stdlib.h> 


int maxArr(int *arr) 
{ 
    int i=0; 
    for (i = 0; i < 10; ++i) 
    { 
     printf("%d\n",arr[i]); 
    } 
    return 0; 
} 


int main() 
{ 
    int* i = {0,1,2,3,4,5,6,7,8,9}; 
    maxArr(&i); 
    return 0; 
} 

而不是打印0,1,2,3,4但是,...,9

我得到這個:

0 
0 
0 
0 
0 
0 
1809693728 
32767 
203279940 
1 

爲什麼?

+2

你有多少編譯器警告無視?如果答案沒有,你需要得到一個更好的編譯器,或者找出如何打開基本警告。 –

回答

1

您需要i通過,不&i

int main() 
{ 
    int* i = {0,1,2,3,4,5,6,7,8,9}; 
    maxArr(i); 
    return 0; 
} 

而是通過數組迭代,你是通過內存地址迭代開始&i的。

1

你給了錯誤的指針 - 你得到錯誤的數據(在最好的情況下):

maxArr(&i); 

應該

maxArr(i); 

我不知道你怎麼沒得到通過一個警告int **代替int *

2

您的i初始化更改爲:

int i[10] = {0,1,2,3,4,5,6,7,8,9}; 

...並致電maxArray只需i;即maxArray(i)

1

你做錯了。

這裏我已經指出了數組的第一個元素。

int* i = {0,1,2,3,4,5,6,7,8,9}; 
maxArr(&i); 

i被存儲在某處說存儲器位置XYZ,並在XYZ你有另一存儲器位置存儲的是所述陣列的所述第一元素的位置說ABC 所以當你經過& I,它發送位置我,即xyz而不是abc。

要糾正它修改代碼,

int* i = {0,1,2,3,4,5,6,7,8,9}; 
maxArr(i);