gpt4 book ai didi

c - 使用指针引用时的 block 级变量范围和生命线

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:43 25 4
gpt4 key购买 nike

以下是产生两种不同输出的最简单的代码,

  1. 10(Turbo C 版本 3.0)
  2. 0 ( 在线编译器 ideone

代码

#include<stdio.h>
int main(){
int *j;
{
int i = 10;
j = &i;
}
printf("%d",*j);
}

未定义行为的这一部分是另一个question on SO说?

As per the referenced question, printf produces the output 10 only because there is no other program/system that overwrites the same piece of memory.

最佳答案

是的,您链接到的那个问题的答案是正确的。结果是未定义的行为。在 C 标准的所有版本中。

就您的程序而言,变量 i 在包含它的 block 的末尾不再存在。

j 的值因此是一个已经不复存在的地址。因此,评估 *j 会产生未定义的行为。

未定义行为的一个可能症状是编译器之间的输出不同。还有许多其他可能的症状,因为在形式上,当行为未定义时任何事情都允许发生。

关于c - 使用指针引用时的 block 级变量范围和生命线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275580/

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