сравнение многомерных массивов с sizeof () - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть массив, состоящий из массивов произвольной длины.

int foo[] = {99, 1, 2};
int baz[] = {9, 8};
int tar[] = {-1, -2, -3, -4, -5, -6};

int *stuff[] = {foo, baz, tar}

Я не знаю размер ни одного из этих массивов, мне нужно определить размер, используя sizeof(), но я получаю странныйрезультаты, которые, кажется, не имеют смысла, когда я сравниваю их.

Например, когда я печатаю места памяти, они совпадают:

printf ("%p ", foo);
printf ("%p ", stuff[0]);

> 0x7ffef86f8de4 0x7ffef86f8de4

И когда я печатаю первые значенияВ массиве они одинаковы:

printf ("%d ", foo[0]);
printf ("%d ", stuff[0][0]); 

> 99 99

Однако здесь возникает проблема, когда сравнивать их с sizeof() они НЕ одинаковы:

printf ("%lu ", sizeof(foo)/sizeof(foo[0]));
printf ("%lu ", sizeof(stuff[0])/sizeof(stuff[0][0]));

> 3 2

1 Ответ

3 голосов
/ 23 сентября 2019

Проблема в том, что у вас нет массива массивов, у вас есть массив указателей .Так что sizeof(stuff[0]) дает вам размер указателя, а не размер массива, на который указывает указатель.Как только вы преобразуете массив в указатель (что происходит практически каждый раз, когда вы используете массив, поскольку вы не можете ничего сделать с самими массивами), размер массива теряется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...