【发布时间】:2020-07-28 08:08:55
【问题描述】:
问题一:指针值是什么?
指针类型的值是指向或超过对象末尾的指针,表示对象占用的内存中第一个字节([intro.memory])的地址54或结束后的内存中第一个字节对象占用的存储空间。
是不是说指针值就是一个对象的地址?
问题2:如何理解**指针值不变**?
否则,如果原始指针值指向对象a,并且存在与a指针可互转换的T类型对象b(忽略cv限定),则结果是指向b的指针。否则,指针值不会因转换而改变。
考虑下面的例子:
#include <iostream>
int main(){
int a = 0;
void* tmp = &a;
char* obj = static_cast<char*>(tmp);
}
根据上面的引用,我们知道tmp的原始指针值指向a,而目标指针值指向一个char类型的对象,因为它们不是指针互转换的,因此句子指针值通过转换没有改变工作。是否意味着obj现在是指向char类型对象的指针并且对象的动态类型是@987654327 @,如果我误解了pointer value is unchanged,这句话是什么意思?
问题3:如何理解the result is a pointer to b。
#include <iostream>
struct Data{
int c;
}
int main(){
Data d;
void* tmp2 = &d;
int* ptr = static_cast<int*>(tmp2);
}
我们知道tmp2的原始指针值指向d,所以原始指针值指向Data类型的对象,目标指针指向int类型的对象,并且这两个对象是指针互转换的,所以the result is a pointer to b这句话起作用了。是不是说现在ptr指向一个int类型对象的指针,对象的动态类型也是int?
【问题讨论】:
-
每个问题一个问题
-
@AsteroidsWithWings 我认为这些问题可以归入同一个问题
-
我知道你知道,我每个问题都问一个问题
标签: c++ c++17 language-lawyer