#询问下C语言在while语句的循环中定义结构体变量指针的问题
第20行和第23行这里每循环一次就重复定义一次结构体指针p和尾指针last,就相当于执行了n次定义了n个p,但是为什么不会报错?
代码如下
#include
#include
#include
typedef struct _node{
int num;
struct _node *next;
}node;
int main()
{
int t;
node *head = NULL;
do{
scanf("%d",&t);
if(t!=-1)
{
node * p=(node*)malloc(sizeof(node));
p->num=t;
p->next=NULL;
node *last= head;
if(last){
while(last->next){
last=last->next;
}
last->next=p;
}else
{
head=p;
}
}
}while(t!=-1);
node *q=head;
while(q->next)
{
printf("%d\n",q->num);
q=q->next;
}
}
定义在循环里面并不会每执行循环创建一个这种变量,而是一共在堆栈上就有这么一个,并且变量只能在循环里被访问
参考GPT和自己的思路:
在循环语句中定义结构体变量指针的问题,是可以在每次循环中定义多次的。在C语言中,变量的作用域是由其定义的位置决定的,而循环语句中的变量定义,其作用域只限于该循环内,当循环执行完毕后,该变量就被销毁了。因此,循环语句中多次定义同名变量不会报错。在代码中,每次循环中的结构体指针p和尾指针last都是局部变量,作用域仅限于当前循环内,所以不会造成冲突和报错。
参考GPT和自己的思路:
在循环中定义结构体指针变量并不会报错,因为每次循环结束后,这些变量的作用域就结束了,内存会被回收。下一次循环重新定义这些变量并不会产生冲突,因为它们在不同的作用域中。另外,C语言循环语句中定义变量的做法是很常见的,可以更好地控制变量的作用范围,以达到优化的目的。但是,需要注意的是,当循环中的变量申请了内存空间,如果没有及时释放这些空间,可能会导致内存泄漏问题。