оператор c ++ sizeof - указатель на double - PullRequest
4 голосов
/ 28 февраля 2012

У меня неожиданный результат с оператором sizeof (C ++).В основном классе у меня есть эти строки

 double * arguments_ = new double();
*arguments_  = 2.1;
*(arguments_+1) = 3.45;
 cout <<  (sizeof arguments_) << ' ' <<  (sizeof arguments_[0]) << ' '<< (sizeof arguments_)/(sizeof arguments_[0]);

, которые дают мне вывод 4 8 0

Двойной размер составляет 8 байт, а (sizeof arguments_ [0]) = 8. Однако почему(sizeof arguments_) также не выражается в байтах (2 * 8 = 16)?Размер приложения оператора

Ответы [ 4 ]

6 голосов
/ 28 февраля 2012

Оба значения выражены в одинаковых единицах.У вас есть 32-битная система, поэтому размер адреса составляет 32 бита или 4 байта.Размер double в вашей системе составляет 8 байт.Результат целочисленного деления 4/8 равен нулю.

2 голосов
/ 28 февраля 2012

(sizeof arguments_) возвращает размер вашего указателя, который составляет 4 байта.

2 голосов
/ 28 февраля 2012

Потому что, когда вы применяете оператор sizeof к указателю независимо от того, на какой тип он указывает, вы получите размер пространства, занимаемого указателем.

А в C ++ переменная-указатель занимает 4 байта (в архитектурах с 32-битными адресными шинами).

1 голос
/ 28 февраля 2012

То, что вы получили:

sizeof (указатель) = 4 байта

sizeof (double) = 8 байтов

4/8 = 0 (запоминание / равно целому числуделение)

...