【发布时间】:2015-12-16 13:20:15
【问题描述】:
我对指针不是很熟悉,因为我主要做java,而java没有指针,现在我正在学习C++。在C++教程中,为了知道变量占用的内存大小,导师在指向变量的指针上使用了size of,即
int v = 23;
int *p = &v;
cout << sizeof(p) << endl;
这让我很困惑,因为在第一年我学习的是 C 编程,我需要对变量本身执行 sizeof。所以我首先得出结论,他们的意思是一样的。但是当我在我的电脑上尝试时,我得到了不同的结果。我有以下代码...
#include <iostream>
int 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 而不是变量本身,因为他想知道该变量占用的内存量。我知道 C/C++ 中的变量由于架构不同而具有不同的内存容量,至少这是我在 C 中所学的。64 位机器中的 int 与 32 位机器上的大小不同。但我虽然我的结果必须至少一致,即 8 和 8,或 4 和 4。我使用的是 64 位架构和 64 位操作系统,我的朋友使用的是 64 位架构和 32 位操作系统。
【问题讨论】:
-
“java 没有指针” - 事实并非如此。 Java 到处都有指针,比您在现代 C++ 中所能找到的要多得多,包括所有那些非常乏味的空检查和违反快速失败原则的行为。 Java 只是倾向于将其指针称为“引用”,
NullPointerException除外。 Java 没有 C++ 引用。 -
我理解你所说的 java 有指针但只是称它们为引用的意思。但是这样说可能会误导一些 C/C++ 程序员。他们可能会开始考虑指针算术、尊重等。我可能错了,但我知道 java 不会做任何这些。但我什至知道什么:-)stackoverflow.com/questions/2629357/does-java-have-pointers