2015-10-09 3 views
-2

Я пишу программы C, указанных ниже:ошибки при использовании объявить ссылочный параметр

#include <stdio.h> 

int sum(int&, int*); 
int main(int argc, const char * argv[]) { 

    int array[]  = {1,2,3}; 
    int temp  = 0; 
    int _result  = sum(temp, 3); 
    return 0; 
} 

int sum(int &sum, int *array) 
{ 

} 

Но моя программа есть ошибка для декларации, то не знаю, объявить «&» для функции
int sum(int&, int*);

Как решить эту проблему?

+7

Ссылки не существуют в C. Перейдите вместо указателя. – owacoder

+1

И сумма вызова с 3 как второй параметр не имеет смысла. – LPs

+1

Это не код C. C не имеет ссылок. Если вы программируете на C++, укажите C++ вместо C. – fuz

ответ

1
  1. Ссылки не доступны в
  2. Второй параметр вызова сумму не имеет смысла.

Я думаю, вы хотите что-то вроде

#include <stdio.h> 

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

    int array[]  = {1,2,3}; 
    int temp  = 0; 
    int result  = sum(&temp, array, 3); 
    return 0; 
} 

int sum(int *sum, int *array, int array_size) 
{ 
    // sum stuff 
    return *sum; 
} 
+0

Да, я вижу. большое спасибо. :) – DinhNC

1

Ссылки не существует в C, как в C++. Если вам нужен косвенный доступ к некоторому объекту, вы сделаете это с помощью указателя, который содержит адрес для объекта.

Чтобы принять аргументы в функции C, вы объявляете такую ​​функцию: T foo(T *bar), где T - тип. В этом заявлении говорится, что вы должны передать указатель в качестве аргумента этой функции.

При вызове функции, которая принимает указатели в качестве аргументов, вы делаете это так: T result = foo(&arg) (здесь мы предполагаем, что тоже возвращает объект типа T). Мы передаем аргументы как &arg, потому что указатель как он принимает адрес памяти; оператор & возвращает адрес объекта.

Ваше замешательство может возникнуть из-за того, что указатели могут косвенно получать значения; используя оператор * или оператор разыменования, который возвращает содержимое по адресу, удерживаемому указателем.

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