2014-11-21 2 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

+1

Объявить 'int * getEvenNumbers (int * even);' before 'main()', чтобы заставить компилятор указать одну ошибку - вы не передаете 'even' функции. Внутри функции вы возвращаете первое четное значение 'point' (которое равно 2) и никогда не устанавливаете ничего в массиве. И вы возвращаете указатель на локальную переменную, которая является строгой no-no; это приводит к неопределенному поведению, когда он используется вызывающим кодом. –

+0

Ну, ваша задача - заполнить массив 'even' цифрами и обратить внимание на то, что этот массив не переполняется. То, что вы делаете, это вернуть указатель на автоматическую переменную, которая является незаконной. Кроме того, как ваша функция знает верхний предел? Как узнать максимальный размер массива? –

ответ

0

на языке C, размер массива должен быть константным.
В отличие от java или C#, вы не можете иметь массив размером 10, а затем во время работы программы измените его на 15.
Следовательно, размер массива должен быть числом const (или определением, которое в основном то же самое).
Кроме того, определение - это то, что нельзя изменить как переменную.

0

Просто укажите количество нарушений в вашем коде.

  1. Вы используете основные(), которая не является правильным прототипом для основных() она должна быть

    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.

Смежные вопросы