Передача аргумента массива в функцию

При вызове функции

int sum_array(int array[], int arr_length)
{ 
   int sum = 0;  
   while(--arr_length >= 0)
      sum += array[arr_length];
   return sum;
}

в основной функции

 int main()
{
    int b[10];
    ...
    total = sum_array(b,10);
    ...
}

зачем передавать аргумент b , а не b[] вместо sum_array(b[],10)?
ПРИМЕЧАНИЕ: я не разбираюсь в указателях.


person haccks    schedule 27.06.2013    source источник
comment
Потому что b — это имя переменной; скобки являются частью типа переменной и не нужны для вызова функции.   -  person Rob I    schedule 28.06.2013
comment
@RobI Следует ли это (b[] передавать или нет?   -  person haccks    schedule 28.06.2013
comment
Переменная b может быть передана в функцию так, как написано - sum_array(b,10). Нет необходимости (да и не получится) передавать b[] в функцию.   -  person Rob I    schedule 28.06.2013
comment
да.....это мой вопрос, почему я не могу пройти b[]?   -  person haccks    schedule 28.06.2013
comment
почему я не могу передать b[] -- b[] представляет собой серию из 3 токенов, а не то, что вы можете передать. То, что вы хотите передать, это массив b, и вы делаете это, используя его имя, b.   -  person Jim Balter    schedule 28.06.2013


Ответы (3)


В C массивы передаются как указатель на первый элемент. Тип b — массив.

При передаче b вы фактически передаете указатель на первый элемент массива.

person Maroun    schedule 27.06.2013
comment
Вы должны прочитать учебник. Указатели — это самые основы. - person Maroun; 28.06.2013
comment
Я только две главы далеко от указателей. Но что сейчас? любой другой способ понять это? - person haccks; 28.06.2013
comment
Попробуй написать код с указателями, поиграйся с ним... рухнет, будешь отлаживать, попотеешь, но в конце концов поймешь. - person Maroun; 28.06.2013
comment
Но что сейчас? -- Хм, прочтите эти две главы, а затем главу с указателями, затем переходите к SO. В FAQ написано, что делать наоборот - неправильно. - person Jim Balter; 28.06.2013
comment
@hackks Нет ничего невозможного... путь в тысячу миль начинается с одного шага. - person Maroun; 28.06.2013
comment
@МарунМарун; Тип b - это массив, тогда int означает что? - person haccks; 28.06.2013
comment
@hackcks Когда вы пишете int b;, тогда b является переменной типа int (целое число). Но когда вы пишете int b[10];, тогда b представляет собой массив из 10 целых чисел. - person Maroun; 28.06.2013
comment
@МарунМарун; Означает ли int b[10], что b - это переменная типа массива, содержащая элементы целочисленного типа? - person haccks; 28.06.2013
comment
@hackcks Эта ссылка должна помочь вам лучше понять массивы. - person Maroun; 28.06.2013
comment
давайте продолжим это обсуждение в чате - person Maroun; 28.06.2013

  • зачем передавать параметр b, а не b[] как sum_array(b[],10)

Короткий ответ: потому что b[] недопустимый синтаксис.

Здесь

int b[10];

объявлена ​​переменная b. int [10] - это тип переменной.

Поскольку функции принимают в качестве параметров идентификаторы, а не типы, вы должны передавать идентификатор в функцию. Идентификатор b.

  • ПРИМЕЧАНИЕ. Я ничего не знаю об указателях.

Это не имеет ничего общего с указателями.

person kotlomoy    schedule 27.06.2013

Функция ожидает указатель на массив int, поэтому вам нужно передать указатель на начало массива. b[10] указывает на одиннадцатый (!) индекс массива из десяти элементов.

person James Cronen    schedule 27.06.2013