C 中的这两个简单代码是相同的,但我得到不同的输出。会喜欢一些反省
第一个代码的输出是正确的,这是我所期待的,只是我不明白为什么输出会通过注释 printf 语句而改变,但这很简单,即使在调试之后我也不明白其中的逻辑,两个代码中的输出应该相同,因为它们是相同的,任何关于从函数返回数组到 main 然后打印这些数组的帮助都会帮助我。
#include <stdio.h>
int* func ()
{
int a[3] = { 1, 2, 3};
printf ("size: %d\n", sizeof(a[2]));
return a;
}
int main()
{
int *b, c, i;
b = func ();
for (i=0; i<3; i++)
{
printf ("%d\n", *b + i);
}
return 0;
}
输出: 尺寸:4
1
2
3
#include <stdio.h>
int* func ()
{
int a[3] = { 1, 2, 3};
//printf ("size: %d\n", sizeof(a[2]));
return a;
}
int main()
{
int *b, c, i;
b = func ();
for (i=0; i<3; i++)
{
printf ("%d\n", *b + i);
}
return 0;
}
输出: 1
1962249430
1962249431
最佳答案
此代码表现出未定义的行为。函数 func
正在返回局部变量 a
的地址,该地址在函数返回后立即超出范围。然后这个不再有效的地址在 main
中被取消引用,导致意外的事情发生。
关于c - C 中的这两个简单代码是相同的,但我得到不同的输出。会喜欢一些内省(introspection),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35946357/