程序中定义的全局变量,list 在input中已经赋值,为什么print函数中List=null?

#include
#include
#define N 4
struct node{
int score;
struct node*link;
};
struct node node;
struct node*list,*p,*r,*q;
void input(struct node*list)
{
int i;
int ch;
for(i=0;i {
printf("please input the score of %d\t",i+1);
p=(struct node*)malloc(sizeof(struct node*));
scanf("%d",&p->score);
p->link=NULL;
if(list==NULL)
list=p;
else
r->link=p;
r=p;
printf("数据为%d",p->score);
}
}
void average(struct node*list)
{
int s=0,i;
double average2;
if(list==NULL)
printf("链表为空");
for(i=0;i {
s+=list->score;
list=list->link;
}
average2=(double)s/N;
printf("%f",average2);
}
void print(struct node*list)
{
int i;
printf("顺利进入");
if(list==NULL)
printf("这是空链表");
else
{
q=list;
while(q->link!=NULL)
{
printf("%d",q->score);
q=q->link;
}
}}
int main()
{
void input(struct node*list);
void average(struct node*list);
void print(struct node*list);
int ah;
system("cls");
while(1){
printf("链表操作系统:");
printf("\n1.建立链表\n2.输出数据\n3.求平均数\n");
scanf("%d",&ah);
switch(ah){
case 1:input(list);break;
case 2:print(list);break;
case 3:average(list);break;
default:printf("wrong!");break;
}}}

3个回答

楼主直接复制跑一下

#include<iostream>
#include<stdio.h>
using namespace std;
#define N 4
struct node{
    int score;
    struct node*link;
};
struct node node;
struct node*list,*p,*r,*q;
void input()
{
    int i;
    int ch;
    list = NULL;
    for(i=0;i < N; i++)
    {
        p=(struct node*)malloc(sizeof(struct node));
        printf("please input the score of %d\t",i+1);
        scanf("%d",&p->score);
        p->link=NULL;
        if(list==NULL)
            list=p;
        else
            r->link=p;
        r=p;
        printf("数据为%d",p->score);
    }
}
void average()
{
    int s=0,i;
    double average2;

    if(list==NULL)
        printf("链表为空");
    for(i=0;i < N; i++)
    {
        s+=list->score;
        list=list->link;
    }
    average2=(double)s/N;
    printf("平均值为:%lf\n",average2);
}
void print()
{
    int i;
    printf("顺利进入\n");
    if(list==NULL)
        printf("这是空链表");
    else
    {
        q=list;
        while(q!=NULL)//这里只需要判断q就行
        {
            printf("%d\n",q->score);
            q=q->link;
        }
    }}
int main()
{
    void input();
    void average();
    void print();
    int ah;
    system("cls");
    while(1){
        printf("链表操作系统:");
        printf("\n1.建立链表\n2.输出数据\n3.求平均数\n");
        scanf("%d",&ah);
        switch(ah){
        case 1:input();break;
        case 2:print();break;
        case 3:average();break;
        default:printf("wrong!");break;
        }
    }
}

有几个问题:
1.既然list指针已经变成全局的了,就不要传参了,楼主那样传一级指针是没有用的,操作的都是list的一个副本,所以就算插入的代码没错,
也会输出是空链表(传二级指针可以解决)
2.输出的函数里while循环只要判断while(q!=NULL)就行了

运行结果:
图片说明

你可以在赋值的时候和输出的时候,分别输出下list的地址

赋值之后不为空,但在另外函数里就变为了null,可是那不是全局变量吗

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
js 一个全局变量,在一个函数中进行赋值,调用另一个函数 ,这个全局变量的值却没有值为undined
3
在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?
1
全局变量释放的顺序怎样的?
1
ORACLE 中定义全局变量,在其他各个PROCEDURE中使用
2
mfc(nEditflag全局变量怎么定义)
1
dll里面修改主程序的全局变量
3
全局变量跨线程自动赋值的问题?
1
vb6.0里的type定义数组和直接定义成全局变量的数组有什么不同,type的数组需要分配内存空间
2
vb的exe内存能不能直接同时读取ocx的内存里定义的全局变量的变量名?
2
ocx里出现同名字的全局变量,会不会覆盖主程序中对应的全局变量名?
2
请问vb语言中怎么区隔ocx内存中的全局变量和exe内存中的全局变量的定义?
2
vb中怎么控制不同变量的定义所使用的变量名不同 ?
2
在vb编程中我们一般定义全局变量在标准模块中,标准模块会像ocx那样自动分配的内存变量么?
2
怎么针对ocx访问exe的内存变量来定义exe里的全局变量,定义成public型的为什么还是不可以?
2
vb怎么对当前程序运行的全局变量使用file语句全部存盘?
2
一个APP中不同的Activity,定义的相同的全局变量会有影响吗
2
全局变量的定义可以起到全局对象的选择的作用么?vb中怎么利用全局对象实现多重选择启动
0
linux驱动,对全局变量和静态(static修饰)的数量大小有没有限制,可以改动吗?
2
关于CLR窗体的类类型全局变量问题
2
Python全局变量,赋值相关的一个问题