Ответы Митча Уитта и Хафеза совершенно правильные и точные. Я собираюсь показать некоторую дополнительную информацию, которая иногда может оказаться полезной.
Обратите внимание, что то же самое происходит, если вы сообщаете компилятору, что у вас есть массив правильного размера
void load_buffer(char buffer[100]) {
/* prints 4 too! */
printf("sizeof(buffer): %d\n", sizeof(buffer));
}
Массив в качестве параметра просто объявляет указатель. Компилятор автоматически изменяет это значение на char *name
, даже если оно было объявлено как char name[N]
.
Если вы хотите, чтобы вызывающие абоненты передавали только массив размером 100, вы можете вместо этого принять адрес массива (и его тип):
void load_buffer(char (*buffer)[100]) {
/* prints 100 */
printf("sizeof(buffer): %d\n", sizeof(*buffer));
}
Это указатель на массив, который у вас есть в main, поэтому вам нужно разыменовать в функции, чтобы получить массив. Индексирование затем выполняется
buffer[0][N] or (*buffer)[N]
Никто из тех, кого я знаю, этим не занимается, и я сам этим не занимаюсь, потому что это довольно усложняет передачу аргумента. Но это полезно знать об этом. Вы можете вызвать такую функцию, тогда
load_buffer(&buffer)
Если вы хотите принять и другие размеры, я бы выбрал параметр-N, который рекомендуют другие два ответа.