Массивы и указатели это разные вещи. Указатель может быть использован для доступа к элементу в массиве. Чтобы иметь возможность инициализировать массив, вам нужно объявить массив, а не указатель.
Чтобы показать разницу, попробуйте:
int[] ia = {1, 2, 3, 4, 5, 6, 7, 8};
int* ip = ia;
printf("sizeof(ia): %zu, sizeof(ip): %zu", sizeof(ia), sizeof(ip));
Первый должен печатать размер массива, второй размер указателя int.
Странная вещь в C состоит в том, что когда массив передается в качестве параметра функции, он распадается на указатель. Подробнее см. В разделе 2.3 http://www.lysator.liu.se/c/c-faq/c-2.html. Причина, по которой main принимает argv**
вместо argv*[]
, заключается в том, что argv*[]
затухает в argv**
при передаче в качестве параметра функции.