关于c中结构体

来源:互联网 发布:网络选出十大民谣歌手 编辑:程序博客网 时间:2024/05/12 07:12

一、结构体(一般类型)

1.结构体类型定义的一般形式为:

struct 结构体名

{

数据类型 成员1;

数据类型 成员2; //结构成员可以是任意的基本数据类型,也可以是数组、指针类型的变量、结构体变量。

数据类型 成员3;

};                                                      //最后的;不能少

例:

struct data

{

int year;

int month ;

int day;

};

struct student

{

long num;

char sex;

char name[10];

struct data birthday;

  float score;

};

1.结构体变量的说明

1.1先定义结构体类型,再说明结构体变量

struct student

{

int num;

char name[10];

char sex;

float score; 

};

struct student stu1,stu2;

1.2.在定义结构体的同时定义结构体变量

struct 结构体名

{

数据类型 成员 1;

数据类型 成员 2;

……

数据类型 成员 n;

}结构体变量名列表;

struct student

{

int num;

char name[10];

char sex;

float score;

}stu1,stu2;

1.3.如何使用结构体的成员变量

 1 #include <stdio.h> 2 struct student 3 { 4   long int num; 5   char name[20]; 6   char sex; 7   char addr[30]; 8 }a = {89031, "Li Lin", 'M', "123 Beijing Road"};    //定义了结构体变量,并给予赋值 9 void main()10 {11   printf("NO. : %d\nname: %s\nsex: %c\naddress: %s\n", a.num, a.name, a.sex, a.addr) //输出结构体成员的值12 }
注意:一个结构体变量不能作为一个整体输入/出,必须要分别输入/出单个成员变量

1.4.结构体数组

struct student
{
    int mum;
    char name[20];
    char sex;
    int ag;
    float score;
    char addr[30];
}stu[3] = {{10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
        {10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"},
       {10101,"Li Lin", 'M', 18, 87.5, "103 Beijing Road"}};

1.5实例

复制代码
 1 #include <stdio.h> 2 #include <string.h> 3 #include <stlib.h> 4  5 struct person 6 { 7   char name[20]; 8   int count; 9 }leader[3] = {{"Li", 0},10        {"Zhang", 0},11        {"Fun", 0}};12 13 void main()14 {15   int i, j;16   char leader_name[20];17   for(i = 1; i<= 10;i++)18   {19     scanf("%s", leader_name);20     for(j=0;j<3;j++)21       if(strcmp(leader_name, leader[j].name) == 0)22         leader[j].count ++;23   }24   printf("\n");25   for(i=0;i<3;i++)26   printf("%5s: %d\n", leader[i].name, leader[i].count);27   system("pause");28 }
复制代码

二、typedef  struct  类型结构体

2.1.利用重命名类型(typedef)说明结构体

typedef:C语言中允许用户自己定义类型说明符,即利用类型定义符typedef为数据类型取别名

一般形式:

typedef  一定义的类型标识符新标识符;

作用:利用新的标识符代替原来一定义的标识符

例:

typedef int DataType;

第一种  上面第二种用法前面直接加typedef   //以下转载

typedef struct student{

  char name[20];

  int age;

  char class;

}student_1;

这语句实际上完成两个操作:
1) 定义一个新的结构类型

struct student{

  char name[20];

  int age;

  char class;

};
2) typedef为这个新的结构起了一个名字,叫student_1。
typedef struct student student_1; (对比typedef int student_1来进行理解)
  因此,student_1实际上相当于struct student,这样定义一个变量的时候,既可以用struct student aaa,也可以用student_1 aaa。student_1成了一个数据类型。

如果有逗号,比如

typedef struct student{

  char name[20];

  int age;

  char class;

}student_1,student_2;

可以先理解成

struct student{

  char name[20];

  int age;

  char class;

}student_1;

struct student{

  char name[20];

  int age;

  char class;

}student_2;

这样再加上typedef,同上分析,也就是说struct student有两个别名,分别是student_1和student_2,都可以代替struct student定义变量。也就是说有三种用法,struct student aaa;student_1 aaa;student_2 aaa都是等价的。

第二种  上面第三种用法前面直接加typedef

typedef struct {

  char name[20];

  int age;

  char class;

}student_1;

根据唯一性,即定义变量的时候只能是student_1 ;

注意:下面的3种表示形式是等价的

1.结构体变量.成员名

2.(*p).成员名

3.p->成员名      //->指向运算符

附:->是指向运算符

  p -> n 得到 p 指向的结构体变量中的成员 n 的值

  p -> n ++ 得到 p 指向的结构体变量中的成员 n 的值,用完值后使它加1

  ++p -> n    得到 p 指向的结构体变量中的成员 n 的值使之加 1 (先加)

三、动态链表所需的函数

(1)分配内存空间函数malloc

函数原型

void * malloc(unsigned int size);

功能:在内存的动态存储区中分配一块长度为size个字节的连续区域,函数的返回值为该区域的起始地址指针。若分配不成功返回NULL.

调用形式:

(<类型说明符>*)malloc (size)

(2)释放内存空间函数free

函数原型:

void free(void * block);

功能:释放block所指向的一块内存空间,block是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc函数多分配的区域。

调用形式:

free(p);//p是指向被释放区域的指针

注意:使用这两个函数需要引用两个头文件stdio.h和alloc.h.









0 0
原创粉丝点击