当前位置:网站首页>C——结构体

C——结构体

2022-07-23 02:03:00 Java学不会

1、自定义类型

  • 自定义类型就是给数据类型取别名

  • 自定义类型不会产生新类型

    typedef int INTEGER;
    INTEGER i,j;
    
    typedef int* INTEGER;
    INTEGER p;
    INTEGER *q
    

2、结构体

结构体中成员类型可以相同也可以不同
在C语言中,数组是表示类型相同的数据,而结构体则是若干类型不同或相同数据项的集合

2.1、结构体类型说明

  • 声明结构体类型的一般形式为:

    struct 结构体名{
          
    	成员列表
    }
    
  • 例:

    struct student{
          
    	int num;
    	char name[8];
    	float score;
    }
    

2.2、结构体变量的定义

  1. 声说明结构体类型,在定义结构体变量

    struct student{
          
    	int num;
    	char name[8];
    };
    struct student a,*b,c[3];
    
  2. 声明结构体类型的同时定义结构体变量

    struct student{
          
    	int num;
    	char name[8];
    	}a,*b,c[3];
    
  3. 直接定义结构体变量

    struct {
          
    	int num;
    	char name[8];
    }a,b,c[3];
    
  4. 使用用户自定义类型定义结构体变量

    typedef struct student{
          
    	int num;
    	char name[8];
    }STD;
    STD a,*b,c[3]
    

2.3、结构体的初始化

  1. 结构体变量的初始化

    struct data{
          
    	int a;
    	float b;
    }s={
          12,24.56};
    
  2. 结构体数组的初始化

    struct {
          
    	int x;
    	int y;
    }c[3]={
          12,24,16,48,60,72};
    

2.4、结构体变量所占空间大小

  • 结构体变量所占空间大小等于所有成员之和

    struct std{
          
    	int a[2];			//此处是VC6.0环境下(int占四个字节)
    	char ch[10];
    	float s;
    	double f;
    } std1,*p=&std1;
    结构体变量std1所占的内存空间字节数为:30
    结构体指针变量p所占的内存空间字节数为:4
    

2.5、结构体成员的引用

  • 形式1:结构体变量名.成员名

  • 形式2:(*结构体指针名).成员名

  • 形式3:结构指针名->成员名

  • . 成员运算符

  • -> 指向运算符

    #include <stdio.h>
    struct abc{
          
    int a,b,c;
    };
    int maint(){
          
    	struct abc s[2]={
          {
          1,2,3},{
          4,5,6}};
    	int t;
    	t=s[0].b+s[1].a;
    	printf("%d\n",t);
    	return 0;
    }
    输出结果:6
    

3、链表

3.1、处理动态链表所需的函数

  • malloc()函数:分配存储单元

    int *p;
    p=(int*)malloc(sizeof(int));		//分配整型存储单元,返回整型指针赋给指针p
    
  • calloc()函数:分配指定的存储单元

    char *p;
    p=(char*)calloc(10,sizeof(char));		//分配10个字符型的存储单元,返回首地址赋给指针p
    
  • free()函数:释放存储单元

    free(p);		//释放指针p所指的存储单元
    

3.2、指向自身的结构体类型

  • 数据域(data)——指针域(next)

    struct node{
          
    	int data;
    	struct node *next;
    };
    

3.3、静态链表

struct node{
    
	int data;
	struct node *next;
}int main(){
    
	struct node a,b,c,*p;				//定义
	a.data=1;b.data=2;c.data=3;			//赋值
	a.next=&b;b.next=&c;c.next=NULL;	//连接
	p=&a;
	while(p){
    
		printf("%d\n",p->data);
		p=p->next;
	}
	return 0;
}

3.4、链表的插入与删除

  • 插入(后插法):将q节点插入到p节点之后

    q->next=p->next;
    p->next=q;
    
  • 删除:将q节点从链表中删除

    p->next=q->next;
    free(q);
    
原网站

版权声明
本文为[Java学不会]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45042462/article/details/125894254