2014-11-21 138 views
-3

編程很新,所以請耐心等待, 我想創建一個代碼,提示用戶輸入一個數組的大小,然後使用指針調用函數來獲取所有偶數所輸入的整數,我不知道該怎麼在這裏做的,是我到目前爲止有:使用指針和參考函數

#include<stdio.h> 
#define SIZE 100 
int *getEvenNumbers(); 
main() 
{ 
    int *ptr,N; 

    printf("Please enter an integer: "); 
    scanf("%d", &N); 
    SIZE=N; 
    int even[SIZE]; 


    ptr=getEvenNumbers(); 
    printf("%d",*ptr); 

} 
int *getEvenNumbers(int *even) 
{ 
    int point=0; 
    for(point=1;point<=SIZE;point++) 

    if(point%2==0) 

    //point = 12; 
    return (&point); 
} 
+1

返回一個指向局部變量的指針是未定義的行爲。 – EOF 2014-11-21 17:52:48

+1

在main()之前聲明'int * getEvenNumbers(int * even);'讓編譯器指出一個錯誤 - 您不會將'even'傳遞給函數。在函數內部,您返回'point'的第一個偶數值(即2),並且從不在數組中設置任何值。並且你返回一個指向局部變量的指針,這是一個嚴格的禁止;它會在調用代碼使用時導致未定義的行爲。 – 2014-11-21 17:53:05

+0

那麼,你的任務是用數字填充'even'數組,並注意這個數組不會溢出。你所做的就是返回一個指向自動變量的指針,這是非法的。另外,你的函數如何知道上限?它如何知道陣列的最大尺寸? – 2014-11-21 17:53:11

回答

0

在C語言中,數組大小必須是常量。
與java或C#不同,你不能有一個10的大小的數組,然後在程序運行時將它改爲15.
因此,數組的大小必須是一個常數(或一個定義,基本上是一樣的東西)。
同樣,定義是不能像變量一樣改變的東西。

0

只是要指出您的代碼中存在多個違規。

  1. 您正在使用的main(),這不是主要的()正確原型應該是

    int main()

  2. 接下來在你的函數getEvenNumbers()你正在試圖返回局部變量的地址,所以你應該得到低於警告。

    warning: function returns address of local variable

  3. SIZE是一個整數文字,所以你當你做SIZE =n;你應該得到下面的錯誤。

    error: lvalue required as left operand of assignment

  4. 函數調用ptr=getEvenNumbers();是錯誤的,它需要一個argurment。