gpt4 book ai didi

c - 为什么代码显示两个不同变量的相同值,temp 既不是本地也不是全局,什么是 temp?

转载 作者:行者123 更新时间:2023-11-30 17:05:46 26 4
gpt4 key购买 nike

#include <stdio.h>
#include <malloc.h>

void test( int * );

struct node
{
int data;
struct node * next;
};

int main()
{
int * count;
int b = 1;
count = &b;
test( count );
test( count );
}

void test( int * count )
{
struct node * temp;
if ( *count == 1 )
{
temp = (struct node*)malloc( sizeof( struct node ) );
*count = 2;
temp->data = 2016;
printf( "\n%d %u\n", temp->data, temp->next );
}
else
{
printf( "\n%d %u 2count\n", temp->data, temp->next );
}
}

因为我知道,当调用函数时,编译器会在内存中创建一个堆栈,并且当函数结束时(即当控件返回到主函数内调用函数旁边的行时结束) ,在我的例子中)然后该函数的堆栈被删除,因此该函数本地的所有变量也应该被删除,但根据上面编写的代码,第二个测试调用调用的临时变量恢复第一个调用的内容,为什么会这样呢?

即使你插入 printf( "\n%d %u\n", 临时->数据, 临时->下一个 );在第二次计数调用之后,即在主函数末尾,您肯定会面临“未在范围内声明”错误,这意味着它不是全局的

最佳答案

代码中有很多错误。您是否尝试过编译它...

foo.c:24:41: warning: format specifies type 'unsigned int' but the argument has type 'struct node *' [-Wformat]
printf("\n%d %u\n" ,temp->data,temp->next);
~~ ^~~~~~~~~~
foo.c:27:48: warning: format specifies type 'unsigned int' but the argument has type 'struct node *' [-Wformat]
printf("\n%d %u 2count\n",temp->data,temp->next);

请编译您的代码,正确缩进并添加用于编译它的编译时标志。这是一个合理的开始

gcc   -g -Og -Wall -ansi -pedantic-errors -std=c99 foo.c
clang -g -O0 -Wall -ansi -pedantic-errors -std=c99 foo.c

gcc   -g -O3 -Wall -ansi -pedantic-errors -std=c11 foo.c
clang -g -O3 -Wall -ansi -pedantic-errors -std=c11 foo.c

这将向您显示一些警告,从代码中删除这些警告并理解它们是您需要做的。使用编译器,它是你的 friend 。

关于c - 为什么代码显示两个不同变量的相同值,temp 既不是本地也不是全局,什么是 temp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35099475/

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