以文本方式查看主题

-  课外天地 李树青  (http://www.njcie.com/bbs/index.asp)
--  清心茶舍  (http://www.njcie.com/bbs/list.asp?boardid=21)
----  关于结构体的第二次课件  (http://www.njcie.com/bbs/dispbbs.asp?boardid=21&id=615)

--  作者:admin
--  发布时间:2008/12/4 6:29:30
--  关于结构体的第二次课件

1 最为简单的使用方法
#include <string.h>
#include <stdio.h>

struct student{
        long num;
        char name[20];
        char sex;
        float score;
};

void main()
{
        struct student stu1={1001,"黎明",\'M\',78.5};
        struct student *p;
        p=&stu1;
        printf("学号是%d,姓名是%s,性别是%c,分数是%f\\n",p->num,p->name,p->sex,p->score);
}

数组指针的回顾
#include <string.h>
#include <stdio.h>

void main()
{
        int i=1;
        int *p1=&i;
        //printf("i=%d\\n",*p1);

        int array[3]={100,200,300};
        int *p2=array;
        //printf("array[1]=%d\\n",*(p2+1));
        //printf("array[1]=%d\\n",p2[1]);
        //printf("array[1]=%d\\n",*(array+1));  
}

指向结构体数组的指针
#include <string.h>
#include <stdio.h>

struct student{
        long num;
        char name[20];
        char sex;
        float score;
};

void main()
{
        struct student stus[]={{1001,"黎明",\'M\',78.5},{1002,"胡哥",\'M\',90},{1003,"白雪",\'F\',81.5}};
        struct student * p1=stus;
        //printf("stus[1]的姓名是%s\\n",stus[1].name);
        //printf("stus[1]的姓名是%s\\n",(*(p1+1)).name);
        //printf("stus[1]的姓名是%s\\n",p1[1].name);
        //printf("stus[1]的姓名是%s\\n",stus[1].name);
}

2 使用结构体参数的函数
回顾函数参数的使用
#include <string.h>
#include <stdio.h>

void func(int);

void main()
{
        int i=0;
        func(i);
        printf("i=%d\\n",i);
}

void func(int i)
{
        i=1;
}

回顾指针函数参数的使用
#include <string.h>
#include <stdio.h>

void func(int *);

void main()
{
        int i=0;
        int *p=&i;
        func(p);
        printf("i=%d\\n",i);
}

void func(int * p)
{
        *p=1;
}

数组参数类似于指针参数
#include <string.h>
#include <stdio.h>

void func(int *);

void main()
{
        int i[]={0,0,0};
        int *p=i;
        func(p);
        printf("i[0]=%d\\n",i[0]);
}

void func(int * p)
{
        *p=1;
        //p[0]=1
}

使用一般的结构体变量参数
#include <string.h>
#include <stdio.h>

struct student{
        long num;
        char name[20];
        char sex;
        float score;
};

void func(struct student);

void main()
{
        struct student stu={1001,"黎明",\'M\',78.5};
        func(stu);
        printf("学号是%d,姓名是%s\\n",stu.num,stu.name);
}

void func(struct student stu)
{
        strcpy(stu.name,"张三");
        //printf("学号是%d,姓名是%s\\n",stu.num,stu.name);
}

使用结构体指针参数
#include <string.h>
#include <stdio.h>

struct student{
        long num;
        char name[20];
        char sex;
        float score;
};

void func(struct student *);

void main()
{
        struct student stu={1001,"黎明",\'M\',78.5};
        func(&stu);
        printf("学号是%d,姓名是%s\\n",stu.num,stu.name);
}

void func(struct student *stu)
{
        strcpy(stu->name,"张三");
        //printf("学号是%d,姓名是%s\\n",stu->num,stu->name);
}

请问结果是什么?
#include <string.h>
#include <stdio.h>

struct student{
        long num;
        char name[20];
        char sex;
        float score;
};

void func(struct student *);

void main()
{
        struct student stu={1001,"黎明",\'M\',78.5};
        func(&stu);
        printf("学号是%d,姓名是%s\\n",stu.num,stu.name);
}

void func(struct student *stu)
{
        struct student newStu={1002,"胡哥",\'M\',90};
        stu=&newStu;
        strcpy(stu->name,"张三");
}


 

[此贴子已经被作者于2010-12-13 20:05:56编辑过]