Я написал эту очень простую программу для проверки размера целочисленных указателей в c.
#include <stdio.h>
int main(void) {
int i = 10;
int* i_ptr = &i;
int arr[3] = {13, 14, 15};
printf("\n ... Size of an integer pointer is: %ld bytes and %ld bits ...", sizeof(i_ptr), 8*sizeof(i_ptr));
printf("\n\n ... Size of a 3-element integer array is: %ld bytes and %ld bits ...\n\n", sizeof(arr), 8*sizeof(arr));
printf(" ... Size of the *arr element is: %ld bytes and %ld bits ...\n\n", sizeof(*arr), 8*sizeof(*arr));
return 0;
}
Вывод относительно размера различных переменных был следующим:
... Size of an integer pointer is: 8 bytes and 64 bits ...
... Size of a 3-element integer array is: 12 bytes and 96 bits ...
... Size of the *arr element is: 4 bytes and 32 bits ...
Теперь мои вопросы следующие. Поскольку я использую 64-битную операционную систему Linux, я понимаю, что размер целочисленной переменной-указателя составляет 64 бита. Размер целочисленного массива составляет 12 байт, так как целое число занимает 4 байта памяти, а массив состоит из 3 целых чисел. Однако, когда я думаю, что массив в основном является указателем в C, а переменная массива указывает на первый элемент массива, я предположил, что размер массива будет напоминать размер соответствующих указателей. Тем не менее, я также понимаю, что это не означает, что размер массива будет 24 байта, а размер 3 целых указателей. Это кажется мне запутанным, поэтому любые советы будут оценены.
Массивы не являются указателями. Если вы объявляете объект типа массива, то его размер равен количеству байтов, занимаемых элементами массива.
Но указатели массивов, используемые в выражениях, за редким исключением, например, используемые в качестве операндов оператора sizeof, преобразуются в указатели на их первые элементы.
Из стандарта C (6.3.2.1 Lvalues, массивы и указатели функций)
"массив в основном является указателем в C" - это совсем не правильно. массивы могут распадаться на указатели, но они не "в основном одинаковы"