我对指针不太熟悉,因为我主要做java,而java没有指针,现在我正在学习C++.在C++教程中,为了知道变量占用的内存大小,导师使用指向变量的指针的大小,即,
int v = 23; int *p = &v; cout << sizeof(p) << endl;
这让我感到困惑,因为在我的第一年,我接受了C编程的教学,我将需要对变量本身做sizeof.所以我首先得出结论,他们的意思相同.但是,当我在我的电脑上尝试时,我有不同的结果.我有以下代码......
#includeint main() { int *ptr = new int; int n = 23; ptr = &n; std::cout << sizeof(n) << std::endl; std::cout << sizeof(ptr) << std::endl; return 0; }
当我运行上面的代码时,我得到4和8的输出.但是我的朋友在他的机器上编译并执行了相同的代码,他输出了4和4.我不知道为什么会这样,为什么导师在指向变量的指针上使用sizeof而不是在变量本身上使用sizeof,因为他想知道该变量占用的内存量.我知道在C/C++,因为有不同的体系结构的不同存储容量的变量,至少这就是我学会了C语言,在64位机的int具有与32位机器上的不同尺寸.但我以为我的结果必须至少保持一致,即8,8或4,4我使用的是64位架构和64位操作系统,我的朋友正在使用一个32位操作系统64位架构.
在你的代码中,
cout << sizeof(p) << endl;
给出变量的大小p
,这是类型的变量int *
.
这跟不一样
cout << sizeof(*p) << endl;
要么
cout << sizeof(int) << endl;
这将给你一个int
变量占用的大小.
话虽如此,只是为了澄清,要了解变量占用的大小,您需要sizeof
在该变量上使用运算符,而不是指向该变量的指针.(你在第一年学到的是正确的).
注意,指针的大小取决于体系结构,因此它可以变化.在某些体系结构中,指针的大小可以是32位(sizeof
将返回4),在某些其他体系结构中,它可以是64位(sizeof
将返回8).