gpt4 book ai didi

c - C 中的这两个简单代码是相同的,但我得到不同的输出。会喜欢一些内省(introspection)

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

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/

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