Да, существуют различия между массивом вещей и указателем на вещь, но они обычно исчезают при определенных обстоятельствах.
Когда вы передаете массив функции (например), которая ухудшается до указателя на первый элемент в этом массиве.
Пример:
#include <stdio.h>
static void func (char arr[], char *parr) {
printf ("in func: %3d %3d\n", sizeof(arr), sizeof (parr));
}
int main (void) {
char arr[100], *parr = arr;
printf (" arr ptr\n");
printf (" --- ---\n");
printf ("in main: %3d %3d\n", sizeof(arr), sizeof (parr));
func (arr, parr);
return 0;
}
Это выводит:
arr ptr
--- ---
in main: 100 4
in func: 4 4
Это обычно раздражает людей без конца, поскольку вы не можете получить размер «массива», переданного функции (вы получаете только размер того, что было передано, что является указателем). Если вам нужен фактический размер, вы должны также указать его:
int array[100];
doSomethingWith (array, sizeof (array));