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

问题描述

程序中定义的全局变量,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 %dt",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;
}}}

解决方案

楼主直接复制跑一下

#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 %dt",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("平均值为:%lfn",average2);
}
void print()
{
    int i;
    printf("顺利进入n");
    if(list==NULL)
        printf("这是空链表");
    else
    {
        q=list;
        while(q!=NULL)//这里只需要判断q就行
        {
            printf("%dn",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,可是那不是全局变量吗

时间: 2024-10-31 11:46:48

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

ORACLE 中定义全局变量,在其他各个PROCEDURE中使用

问题描述 ORACLE 中定义全局变量,在其他各个PROCEDURE中使用 如何在ORACLE中定义一个全局性的常量类,在其他的各个存储过程中调用使用: 类似与JAVA中得常量类这样. 我目前想到两种方案, 1,定义一个表,在这个表中录入各种变量,如何在存储过程中调用(感觉存储过程中,还是硬编码了一些东西) 2,写一个存储过程包,里面都定义function,一个function返回一个变量值(感觉一个变量写一个function太麻烦) 请问各路大神,有没有那种类似JAVA 或者C中,定义一个常量

c++-请问在这个约瑟夫问题中,把数组定义在main()函数前与下面程序中定义的数组方式 有什么异同?

问题描述 请问在这个约瑟夫问题中,把数组定义在main()函数前与下面程序中定义的数组方式 有什么异同? 请问在这个约瑟夫问题中,把数组定义在main()函数前与下面程序中定义的数组方式 有什么异同? 为什么在VC6.0中认为示例程序的数组错误,而在dev C++中却没事 #include <iostream> #include <iomanip> //调用setw()函数 using namespace std; //bool str[101]; int main() { int

c#中定义三个类,在第二个类中实例化第一个类,怎样在第三个类中存数据到第二个类实例的第一个类。

问题描述 c#中定义一个点的数组类,然后在另一个类中实例化点并赋值点的x,y,然后再另外建一个类读取点的近似坐标,怎样把近似坐标存入之前的那个已经有了x,y的点数组?求大神!!! 解决方案 解决方案二:第二个类中将第一个类的实例属性public出来,或者暴露相关设置方法解决方案三:list<T>解决方案四:如果把你提到的类,依次标记为clsA,clsB,clsC,那么clsB至少含有字段privateclsAxxx,privateList<clsA>xxx,分别是:存储点,存储近似

ios-IOS中如何将开源库AFNetworking的GET函数中获取的数据,在函数体外利用呢?

问题描述 IOS中如何将开源库AFNetworking的GET函数中获取的数据,在函数体外利用呢? 代码如下,如何在GET函数外获取到在其内解析到的数据,从而加以利用呢? // // ViewController.m // 1 // // Created by on 16-2-2. // Copyright (c) 2016年 . All rights reserved. // #import "ViewController.h" #import "AFHTTPRequest

jsp中定义和使用方法示例介绍_JSP编程

在jsp中,如果需要处理复杂数据时,在上方定义一个java方法是很有效的解决方案,把处理数据的责任推给该方法,然后该jsp页面的主流程就不受影响.当然也可以使用js定义方法来处理,js似乎更善于定义这样的方法来处理前台数据,但有时候jsp和js之间倒腾数据时会出乱码或者报一些找不到对象的错误,因此他们之间的互相传值还是越少越好. 看一看jsp中定义一个字符串处理的方法: 复制代码 代码如下: <%! String splitString(String str, int a) { if (str

无需指定成员变量-VB2013中定义类型定义问题

问题描述 VB2013中定义类型定义问题 如何在VB2013中定义不需要指定成员变量就可以直接赋值的类型,例如 Dim Num as Integer Num = 100 在结构中如何具体实现 Friend Structure Num1 具体代码如何写End Structure 在自定义代码中具体写法: Dim Num as Num1Num = 100 谢谢了

link中定义list有没有办法像数组那样初始化容量?

问题描述 link中定义list有没有办法像数组那样初始化容量? link中定义list有没有办法像数组那样初始化容量? 解决方案 可以的,比如 List<int> list = new List<int>(10); //创建一个初始有10个元素的List

请问我在.aspx页面中定义的控件,比如&amp;amp;lt;asp:label&amp;amp;gt;等,在.aspx.cs页面中去不能引用,运行老是报错,请高手指点是怎么回事,小弟很着急!

问题描述 请问我在.aspx页面中定义的控件,比如<asp:label>等,在.aspx.cs页面中去不能引用,运行老是报错,请高手指点是怎么回事,小弟很着急! 解决方案 解决方案二:1新建一个网站(VS2005),在设计图中拖入一个Label控件放上去;2在后台.cs文件中,this.Label1.Text="test",即可运行;注:放入的控件会按次序命名为,控件后加编号,如第一个Label就是Label1;

c语言-在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?

问题描述 在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事? 在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事? 解决方案 全局变量是运行时操作系统分配的,分配在堆上,不是分配在静态区,所以不会影响exe的大小. 解决方案二: 你的全局变量没有初始化数据吧?如果你有2M大小的数据,就不一样了. 比如, char a[2*1024*1024] = {0,1,2,3,4..........}; char b[2*1024*1024]; 在链