【问题标题】:Why doesnt pointer dereference work without assigning it first? [duplicate]为什么不先分配指针取消引用就不起作用? [复制]
【发布时间】:2021-05-09 01:34:45
【问题描述】:
int main() {
    
    char *x;
    *x = 'h';

    printf("%p, %c", &x, *x); // prints nothing
    return 0;
}

当我打印 x 的地址时,我得到一个真正的十六进制地址。但是分配后我无法打印 x 。为什么不这样做就不能赋值:

int main() {
    
    char *x;
    char y = 'y';
    x = &y;
    *x = 'h';

    printf("%p, %c", &x, *x); //prints address and 'h'
    return 0;
}

【问题讨论】:

  • 你认为x在第一个代码片段中指向哪块内存?
  • 同样的原因,你不能在分配之前使用任何其他变量的值。

标签: c pointers undefined-behavior dereference


【解决方案1】:

在此声明之后

char *x;

指针(具有自动存储持续时间)具有不确定的值,并且未指向有效对象。所以取消引用它会导致未定义的行为。

至于这个cpde

char *x;
char y = 'y';
x = &y;
*x = 'h';

那么实际上使用指针x 你正在更改有效对象y

x = &y;
*x = 'h';

本质上和写是一样的

y = 'h';

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 2015-12-09
    • 2013-04-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2015-07-03
    • 2011-02-24
    • 1970-01-01
    相关资源
    最近更新 更多