对象指针指向什么? 正如许多学生试图学习C++一样,我对指针和指针特别困惑,

对象指针指向什么? 正如许多学生试图学习C++一样,我对指针和指针特别困惑,,c++,pointers,C++,Pointers,一个简单的指针,如 int *x = new int(5); 这很容易理解,因为x只存储存储int 5的单词的地址 但是如果我们有类似的东西呢 MyClass *x = new MyClass(); 在本例中,x不能指向包含MyClass实例的单词,因为它可能比单词大 所以问题是一个对象指针在内存中实际指向什么?如果你想更改这个短语中的一个单词 x只存储存储int 5的单词的地址 那么我希望事情会明朗 x只存储存储int 5或MyClass()的内存的地址 运算符new使用sizeof(i

一个简单的指针,如

int *x = new int(5);
这很容易理解,因为x只存储存储int 5的单词的地址

但是如果我们有类似的东西呢

 MyClass *x = new MyClass();
在本例中,x不能指向包含MyClass实例的单词,因为它可能比单词大


所以问题是一个对象指针在内存中实际指向什么?

如果你想更改这个短语中的一个单词

x只存储存储int 5的单词的地址

那么我希望事情会明朗

x只存储存储int 5或MyClass()的内存的地址

运算符new使用
sizeof(int)
sizeof(MyClass)
的值来分配足够的内存。例如,sizeof(long-long)通常大于mashine单词的sizeof

此外,即使对于整数,这些大小也等于4字节,编译器实际上可以分配16字节而不是4字节。由实现定义将分配多少内存。考虑到您可能会使分配内存的新函数过载

考虑C++标准

的以下引用 6,除非对象是位字段或零的基类子对象 大小,则该对象的地址是它的第一个字节的地址 占据


如果你想改变这个短语中的一个词

x只存储存储int 5的单词的地址

那么我希望事情会明朗

x只存储存储int 5或MyClass()的内存的地址

运算符new使用
sizeof(int)
sizeof(MyClass)
的值来分配足够的内存。例如,sizeof(long-long)通常大于mashine单词的sizeof

此外,即使对于整数,这些大小也等于4字节,编译器实际上可以分配16字节而不是4字节。由实现定义将分配多少内存。考虑到您可能会使分配内存的新函数过载

考虑C++标准

的以下引用 6,除非对象是位字段或零的基类子对象 大小,则该对象的地址是它的第一个字节的地址 占据


如果你想改变这个短语中的一个词

x只存储存储int 5的单词的地址

那么我希望事情会明朗

x只存储存储int 5或MyClass()的内存的地址

运算符new使用
sizeof(int)
sizeof(MyClass)
的值来分配足够的内存。例如,sizeof(long-long)通常大于mashine单词的sizeof

此外,即使对于整数,这些大小也等于4字节,编译器实际上可以分配16字节而不是4字节。由实现定义将分配多少内存。考虑到您可能会使分配内存的新函数过载

考虑C++标准

的以下引用 6,除非对象是位字段或零的基类子对象 大小,则该对象的地址是它的第一个字节的地址 占据


如果你想改变这个短语中的一个词

x只存储存储int 5的单词的地址

那么我希望事情会明朗

x只存储存储int 5或MyClass()的内存的地址

运算符new使用
sizeof(int)
sizeof(MyClass)
的值来分配足够的内存。例如,sizeof(long-long)通常大于mashine单词的sizeof

此外,即使对于整数,这些大小也等于4字节,编译器实际上可以分配16字节而不是4字节。由实现定义将分配多少内存。考虑到您可能会使分配内存的新函数过载

考虑C++标准

的以下引用 6,除非对象是位字段或零的基类子对象 大小,则该对象的地址是它的第一个字节的地址 占据


对于对象,就像数组一样,它指向数据结构中包含的第一个元素。指针只能指向内存中的一个地址。它们存储的信息不会超过此值。使它们看起来可以指向更大类型的只是编译器在工作。实际上,它甚至代表在内存中占用4字节的整数。int指针将只指向所述数据结构的第一个字节,编译器将根据
sizeof(T)
运算符的结果在需要时加载适当的内存量

例如,
sizeof(int)
返回4,这是存储int的整个值所需的内存字节数。如果创建指向int的指针,它将使用32或64位长的地址引用这4个字节中的第一个字节,具体取决于使用x86体系结构的目标处理器。如果对象MyClass包含3个int和1个double,则
sizeof(MyClass)
操作符将返回20
(3*4+8)
。同样,指向MyClass的指针将仅使用32位或64位地址指向第一个字节


指针的大小在整个CPU体系结构中保持不变。如果您的CPU可以分配8位内存,那么指针的长度将是一个字节。换句话说,
sizeof(T*)==sizeof(无符号字符)
。在x86_64目标体系结构上,指针的长度为64位,因此在
MyClass *x = new MyClass();
Myclass *y = new (0x11111122) MyClass();