我有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)?是sizeof运算符应用
答案 0 :(得分:6)
两个值都以相同的单位表示。您有一个32位系统,因此地址的大小是32位,或4个字节。系统上的double大小为8个字节。整数除法4/8
的结果为零。
答案 1 :(得分:2)
因为当您将 sizeof 运算符应用于指针时,无论它指向何种类型,您都将获得指针占用的空间大小。
在C ++中,指针变量占用4个字节(在具有32位地址总线的体系结构上)。
答案 2 :(得分:2)
(sizeof arguments_)产生指针的大小,即4个字节。
答案 3 :(得分:1)
你得到的是:
sizeof(指针)= 4个字节
sizeof(double)= 8个字节
4/8 = 0(记住/等于整数除法)