在c编程中传递struct的指针

时间:2016-02-22 14:57:44

标签: c

我需要将指针传递给函数,但它不起作用输出为空。

我在1周前在我的大学学习这个指针,但它很困惑。

谢谢你的进步。

下面的代码和输出:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo{
    char CourseID[10];
    char CourseName[50];
    float score;
    struct Nooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo *next;
}course;

void GetData(course *newnode,course *root,course *last) 
{
    char CourseID[10],CourseName[50];
    float score;
    FILE *input;
    input = fopen("Course.txt","r");
    fscanf(input,"%s %s %f",&CourseID,&CourseName,&score);
    while(!feof(input))
    {

        newnode = (course*)malloc(sizeof(course));
        strcpy(newnode->CourseID,CourseID);
        strcpy(newnode->CourseName,CourseName);
        newnode->score = score;
        newnode->next = NULL;       

        if(root == NULL)
        {
            root = newnode;
            last = newnode;
        }
        else
        {
            last->next = newnode;
            last = newnode;
        }

    fscanf(input,"%s %s %f",&CourseID,&CourseName,&score);  

    }
}

void checkScore(course *run,course *root)
{

    run = root;

    while(run != NULL)
    {
        if(run->score >= 80)
        {
            printf("Course ID = %s\n",run->CourseID);
            printf("Course Name = %s\n",run->CourseName);
            printf("Your grade of this Course is  = ");
            if(run->score < 50)
            {
                printf("D");
            }
            else if(run->score < 60)
            {
                printf("C");
            }
            else if(run->score < 70)
            {
                printf("B");
            }
            else
            {
                printf("A");
            }
        }
        run = run->next;
    }

}

int main()
{
    course *root = NULL,*last,*newnode,*run;
    int i,cnt;
    GetData(newnode,root,last);
    checkScore(run,root);



    return 0;
}

这是输出

This is out put

1 个答案:

答案 0 :(得分:1)

首先,这个问题看起来相当荒谬,特别是结构名称为“Nooooooooooooooooooooooo”,这可能是浪费人们试图回答的时间。

其次,你的术语很遥远。将指针传递给结构与指向函数的指针非常不同!

但是在您的代码中,主要问题在于此行:

void GetData(course *newnode,course *root,course *last)

你真的知道你在这里有什么吗?好吧,你有3个本地指针,当你的程序启动时都是null或未初始化。然后在你的函数中,malloc()一些ram并使用这些本地指针来存储这个分配的内存块的地址。但是,您似乎并不了解这些是您传入的指针的本地副本,因此当您的函数结束时,它们将在堆栈展开时消失。

如果你想要返回你分配给调用函数的内存地址,你需要传递指针的地址,然后让你的函数进行双重解引用。

像这样......

course *c;

GetData(&c);

void GetData(course **c)
{
    *c = (course*)malloc(sizeof(course));
    ...
    ...
}