【问题标题】:how typecasting & dereferencing works here?类型转换和取消引用如何在这里工作?
【发布时间】:2019-06-04 12:33:49
【问题描述】:
#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不能解引用?

【问题讨论】:

    标签: c++11 pointers null type-conversion


    【解决方案1】:

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

    您可以添加到一个指针,以获得不同的指针值。这仅针对保留在同一数组中的结果以及“过去的结尾”指针值(将指向单个对象的指针视为长度为 1 的数组)定义。您还可以将指针转换为整数类型,以获取实现定义的值。做这些事情并不涉及取消引用指针。

    添加到空指针也是未定义的行为,因为空指针不指向对象,所以没有什么可以“过时”的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多