Я написал следующий код:
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
char c;
int i;
short int j;
long int k;
float f;
double d;
long double e;
cout << "The size of char is: " << sizeof c << endl;
cout << "The size of int is: " << sizeof i << endl;
cout << "The size of short int is: " << sizeof j << endl;
cout << "The size of long int is: " << sizeof k << endl;
cout << "The size of float is: " << sizeof f << endl;
cout << "The size of double is: " << sizeof d << endl;
cout << "The size of long double is: " << sizeof e << endl;
system("pause");
return 0;
}
Цель этой программы - распечатать размер основных типов данных, которые, я думаю, я выполнил. Другая цель этой программы - напечатать размер указателя на каждый из этих типов данных. Мне сложно понять, как это сделать. Я понимаю, что указатель - это переменная, которая хранит адрес другой переменной, и что указатели включают оператор deference (*). Может ли кто-нибудь предложить предложение? Я не ищу ответа, просто толчок в правильном направлении.
int *p; // p is a pointer to an int
Таким образом, sizeof указателя будет: sizeof p
, который вы можете напечатать так:
cout << "The size of int pointer is: " << sizeof p << endl;
Это то, что вам нужно, чтобы печатать другие размеры указателей.
Выделение происходит только тогда, когда вы хотите получить доступ к указателю. Например
int i = 5;
int *p = &i;
*p = 6;
*p = *p + 1;
//etc
Здесь вы просто хотите получить размер указателей. Поэтому разыменование не требуется.
sizeof *c
а размер указателя будет sizeof c
.
sizeof(&k)
? Кстати, я думаю, вы найдете ответ на это несколько скучно;)