类型转换和取消引用在这里是如何工作的?


#include<stdio.h>
int main(){
    int a, b, c;
    char *p = 0;
    int *q = 0;
    double *r = 0;
    cout<<(int)(p + 1);    // printing 1 char size
    cout<<(int)(q + 1);    // printing 4
    cout<<(int)(r + 1);    // printing 8
    int y = 9;
    int *u = &y;
    cout<<(int)(u+1);       //printing 7208688
   cout<<*(p+1);            //not able to dereferance
   }

在上述两种情况下,类型转换如何工作?

为什么指针 p、q、r 无法取消引用?

取消引用任何pqrp + 1q + 1r + 1u + 1都有未定义的行为,因为这些指针都没有指向正确类型的对象。

可以添加到指针以获取不同的指针值。这仅适用于保留在同一数组中的结果,加上"一个过去结束"指针值(将指向单个对象的指针视为长度为 1 的数组(。还可以将指针转换为整数类型,以获取实现定义的值。执行这些操作不涉及取消引用指针。

添加到空指针

也是未定义的行为,因为空指针不指向对象,所以没有什么可以"一过完"的。

相关内容

  • 没有找到相关文章

最新更新