gpt4 book ai didi

c - 使用指针访问结构元素

转载 作者:太空狗 更新时间:2023-10-29 14:52:52 27 4
gpt4 key购买 nike

当以下程序没有崩溃时,我感到很惊讶。

typedef struct _x {
int a;
char b;
int c;
} x;

main() {
x *ptr = 0;
char *d = &ptr->b;
}

根据我的理解,-> 运算符的优先级高于 & 运算符。因此,当我们尝试取消引用 NULL 指针 tr 时,我预计程序会在以下语句处崩溃。

char *d = &ptr->b; 

但是语句 &ptr->b 的计算结果是一个有效的地址。有人可以解释我错在哪里吗?

最佳答案

您的期望是没有根据的。当您取消引用空指针时,C 程序不一定会“崩溃”。当您尝试做类似的事情时,C 程序会表现出所谓的未定义行为。未定义的行为可以以许多不同的方式表现出来。它可能会导致崩溃。或者它可以产生一些类似于“工作”程序的东西。后者显然是你的情况。

但无论如何,您的程序的行为是未定义的。不,它不会产生您似乎错误地认为的“有效地址”。对应于内存中不存在对象的位置的数字地址是无效的(当然,空指针值除外)。

关于c - 使用指针访问结构元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4613040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com