Я попытался понять размер адреса, используемый для хранения переменных и указателей, указателей-указателей и указателей-указателей-указателей. Результаты несколько путают.Что объясняет этот простой вывод программы-указателя
Вот код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(void)
{
char *** ppptr_string = NULL;
int *** ppptr_int = NULL;
double *** ppptr_dbl = NULL;
char c=0; int i=0; double d=0;
printf("\n %d %d %d %d %d\n", sizeof(&ppptr_string),
sizeof(ppptr_string), sizeof(*ppptr_string), sizeof(**ppptr_string),
sizeof(***ppptr_string));
printf("\n %d %d %d %d %d\n", sizeof(&ppptr_int), sizeof(ppptr_int),
sizeof(*ppptr_int), sizeof(**ppptr_int), sizeof(***ppptr_int));
printf("\n %d %d %d %d %d\n", sizeof(&ppptr_dbl), sizeof(ppptr_dbl),
sizeof(*ppptr_dbl), sizeof(**ppptr_dbl), sizeof(***ppptr_dbl));
printf("\n sizeof(char) = %d, sizeof(int) = %d, sizeof(double) = %d",
sizeof(c), sizeof(i), sizeof(d));
printf("\n sizeof(&char) = %d, sizeof(&int) = %d, sizeof(&double) = %d",
sizeof(&c), sizeof(&i), sizeof(&d));
getch();
return 0;
}
Теперь путаница. Я вижу, что переменная-адрес на этом компьютере всегда имеет длину 2 байта. Независимо от типа переменной и независимо от ее переменной указателя. Но почему я получаю размер 4 для такого количества записей здесь? Указатель имеет размер 4 всегда независимо от типа. Адрес> <, в котором хранится переменная, имеет размер 2. И указанный указатель имеет размер в зависимости от типа.
Почему я получаю 4s в выводе для sizeof ??
Мой выход из Borland C++ 5,02
conio.h? Является ли это компилятором MS-DOS? – src
, пожалуйста, предоставьте вывод, потому что я не получаю, когда вы видите 4s и 2s. –
Если вы получаете 4 для размеров указателя, это потому, что эти указатели имеют 4 байта на вашем компьютере. В стандарте языка не указывается, какой размер должен быть указатель. –