2 djylsy DJYLSY 于 2016.03.30 19:36 提问

程序中定义的全局变量,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个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.30 20:06
已采纳

楼主直接复制跑一下

#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)就行了

运行结果:
图片说明

lx624909677
lx624909677   Ds   Rxr 2016.03.30 19:49

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

DJYLSY
DJYLSY   2016.03.30 19:54

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java中实现全局变量的功能
在一个程序中需要用到全局变量(在多个class之间共享数据),请问如何定义具有这种功能的变量?或者是否有其他的方法解决多个class之间的数据共享(尽量简单实现)。
c#如何定义全局变量list
原文地址:c#如何定义全局变量list 1、List的基础、常用方法: 声明: 1、List mList = new List(); T为列表中元素类型,现在以string类型作为例子 E.g.:List mList = new List(); 2、List testList =new List (IEnumerable collection); 以一个集合作为参数创建List E.g.:
全局变量不能在函数外部赋值.
#include #define MAX_SIZE 10 //通过const修饰的变量的含义代表该变量所在的内存空间是只读的,在定义的时候,必须进行初始化,因为一旦定义好以后该内存空间是不允许修改的 //const和define的区别: //1.const定义的包含有一个变量的所有要素(内存空间,内存空间的大小,内存中所存放的值,内存空间所取的名字),而define的只是一个标识符,不占用任
c语言中不允许在函数外部给全局变量赋值
今天,在写条件编译的时候,出现了在函数外部给全局变量赋值的情况,gcc报错,那么c语言为什么不允许在函数外部给变量赋值呢?为什么声明变 量的时候可以对变量进行赋值? 出错代码: 1 /* 2 * ====================================================================================
List集合为null,导致其他操作报空指针异常。
原则:创建数组对象或者一个方法返回数组时,不要赋值或返回null,而是返回空collection或者空数组:这个技巧通过返回一个空collection或者空数组,可以确保在调用如size(),length()的时候不会因为空指针异常崩溃。Collections类提供了方便的空List,Set和Map: Collections.EMPTY_LIST Collections.EMPTY_SET Col...
对列表List进行赋值
今天讲讲Python中对List进行赋值的方法,并会接下来给出实例和截图详解。 这个问题源自于我想对一个某一个区间内的值进行均匀划分成50份,对此,我想到了用List,并用循环赋值来实现. 并将区间内的值用区间的中值来表示,很显然,算出来的中值肯定会有很多的小数位数,所以我们需要对得到的数进行处理,保留小数点后三位。 首先,区间是[-1.013, 0.614]. 定义区间的始端是 -1.01
python print输出后面为什么会跟一个None
因为python中print函数需要返回值,如果你在print函数中所放的函数没有返回值,那么print将会return None
C#中可以存在全局变量和全局函数吗?
可以在一个类中实现静态属性(字段)和静态方法,以此达到C或C++中全局变量和全局函数的效果。123456789101112131415public static class GlobalFunAndVar{    public static int Number{ get;set;}    public static float Values;         public static floa...
Python 中list赋值引用
开发过程中发现,python中list赋值并不是拷贝,而是指针或者引用,看了些文章,发现
python 当list,dic作为默认参数的正确写法
面试题之一。 python 用list,dic当默认参的时候给我小心点。