我正在进行在线C语言测试(不是为了工作,仅仅是为了我自己)并且我使用哈希符号继续遇到这种类型的问题。我假设它不是拼写错误,我不熟悉这种哈希符号的使用。
#include <stdio.h>
int* func()
{
int num = 10;
return #
}
int main()
{
int *ptr = func();
printf("%d\n", *ptr);
return 0;
}
上述C代码的输出是什么?
答案是它是运行时错误,解释是
函数中定义的变量将在堆栈段中分配,该函数将在函数返回时删除。因此,访问这些变量的地址会导致分段错误。
答案 0 :(得分:23)
创建测试的人没有正确编码他们的HTML。他们希望这条线看起来像是:
return #
他们将其直接放入测试页面的HTML中,忘记&XXX;
是HTML实体的输入方式。 #
是#
字符的实体。他们应该写:
return &num;
&
是&
字符的实体。
答案 1 :(得分:0)
函数func()返回指向变量num的指针。但num是函数func()中的一个自动变量。它存储在堆栈中,其生命周期只是函数本身的生命周期。因此,如果您尝试访问main()中的指针,那么将会出现分段错误cz num不再存在,因此指针并不真正指向任何东西。
编辑:
哈希 - #用于定义宏和头文件。返回# - &gt;它似乎只是问题中的拼写错误。因此,只有错误是指针导致的分段错误。