Вопрос по c++, arrays, struct – C ++ * vs [] как параметр функции

6

В чем разница между:

void foo(item* list)
{
    cout << list[xxx].string;
}

а также

void this(item list[])
{
    cout << list[xxx].string;
}

Предполагая, что элемент:

struct item
{
    char* string;
}

С указателем, указывающим на первый из массива символов

а такжеlist это просто массив предметов ...

Ваш Ответ

3   ответа
8

Читается иначе.[] предполагает, что вы хотите передать массив функции, тогда как* может также означать простой указатель.

Обратите внимание, что массивы распадаются на указатели при передаче в качестве параметров (если вы еще этого не знали).

+ 1 для «Обратите внимание, что массивы распадаются на указатели при передаче в качестве параметров». Я не знал этого, интересно знать. Drise
Было бы хорошо добавить текст из стандарта, чтобы ни у кого не создавалось впечатление, что массивы и указатели в целом одинаковы. Параметры функций - это особый случай, когда стандарт заявляет: «После определения типа каждого параметра любой параметр типа« массив из T »[...] настраивается на« указатель на T »[...].» [dcl.fct] 8.3.5 / 5. bames53
Не только выражения массива распадаются на указатели, когда вы указываете тип массива в качестве параметра функции, он фактически заменяется типом указателя для всех целей, включая перегрузку,sizeof, а такжеdecltype. Вы можете даже объявить это одним способом и определить это другим способом (но вы, вероятно, не должны). aschepler
3

item list[], неitem[]list.

Как обычно использовать[] когда параметр используется как массив и* когда он используется как указатель.

1

FYI:

void foo(int (&a)[5]) // only arrays of 5 int's are allowed
{
}

int main()
{
  int arr[5];
  foo(arr);   // OK

  int arr6[6];
  foo(arr6); // compile error
}

ноfoo(int* arr), foo(int arr[]) а такжеfoo(int arr[100]) все эквивалентны

Похожие вопросы