首页 > 其他分享 >C语言 结构体,共同体,枚举

C语言 结构体,共同体,枚举

时间:2024-11-22 16:45:25浏览次数:3  
标签:变量 成员 数据类型 共同体 指针 C语言 枚举 变量名 结构

结构体

语法:
1>

struct 结构体名称{

        数据类型  变量名1;

        数据类型  变量名2;

        ...

};        

2>

struct  结构体名称{

        数据类型  变量名1;

        数据类型  变量名2;

        ...

}结构体变量名;        注意:该语法在定义结构体时,同时定义了一个结构体变量

3>

struct{

        数据类型  变量名1;

        数据类型  变量名2;

        ...

}结构体变量名;        注意:该语法定义的结构体只能有一个结构体变量

注意:结构体中的变量称为成员变量

定义与初始化结构体变量

struct 结构体名称  结构体变量名 = {值1,值2,值2,...};

struct 结构体名称  结构体变量名;

使用结构体变量操作成员

取值

        语法:结构体变量名.成员变量名

改值

        语法:结构体变量名.成员变量名 = 值;

注意:如果结构体中的成员变量是基本类型或者指针可以使用等号赋值,如果是字符数组则需要使用strcpy进行拷贝操作,如果成员变量是指针会导致浅拷贝.

结构体变量可以直接赋值给结构体变量

memcpy:拷贝指定内存中的数据到指定内存中去

语法:        void *memcpy(void *dest, const void *src, size_t n);

参数:        dest:目标地址        src:资源地址        n:拷贝长度,单位字节

typedef与结构体

1>

typedef struct 结构体名称 别名;        别名只能在定义的代码块中使用

2>

typedef struct 结构体名称 {

        数据类型 变量名1;

        数据类型 变量名2;

        ...

}别名;        别名可以在任意函数中使用,所以推荐使用该语法

结构体指针

结构体名称 *指针变量名 = &结构体变量名;

结构体指针操作成员变量

结构体指针变量->成员变量名

结构体指针变量->成员变量名 = 值;

结构体数组

数据类型 数组名[长度] = {值,值,值,...};

结构体指针数组

结构体名称 *数组名[长度] = {结构体指针1,结构体指针2,...};

结构体成员变量是指针变量

1>给结构体成员为指针变量的使用 = 赋值可能会产生浅拷贝

2>如果结构体变量的成员变量是指针变量,并没有进行初始化,此时该指针为野指针

3>如果结构体指针变量堆区初始化,使用完该结构体变量后要释放该指针变量指向的堆区,否则会导致内存泄漏

4>如果结构体中有指针数组,并且该指针数组中存储的指针指向堆区,那么先释放该数组中存储的地址指向的内存,再释放该数组

结构体嵌套

#include <stdio.h>

typedef struct a{

}A;

typedef struct b{

A   a;

}B;

注意:如果结构体中有其他结构体指针成员变量,并且该指针成员变量堆区初始化,此时应先释放该指针成员变量的地址,再释放自己,即从里到外逐层释放.否则会造成内存泄漏

结构体对齐

1>自动对齐

原则:

结构体中的第一个成员在与结构体变量,偏移量为0的地址处.

确定结构体的分配单位,(即结构体中最大的基本类型长度)

其他成员的偏移量==成员自身长度的整数倍

收尾工作:结构体的总大小==分配单位的整数倍

注意:按成员顺序从上向下

2>强制对齐

#pragma pack (value)        指定的对齐值为基本类型长度的一种即(1.2.4.8)

位域

概述:结构体的成员以二进制位为单位存储,这种叫做位域

unsigned int a:2        表示a只占int类型中的2位二进制位,a的类型还是unsigned int

abcd叫相邻位域,可以压缩,不能超过自身类型大小

注意:不能对位域取地址        给位域赋值,不能超过位域的大小(会导致溢出)

共用体

特点:其成员共用一段内存

语法:

union 枚举名{

        变量名,变量名,...

};

枚举

特点:限定其值的范围

语法:

enum 枚举名{

        变量名,变量名,...

};

标签:变量,成员,数据类型,共同体,指针,C语言,枚举,变量名,结构
From: https://blog.csdn.net/weixin_74792661/article/details/143919293

相关文章

  • C语言字符串处理相关函数
    作用:处理字符串,如计算字符串长度,查找字符串中指定的字符或字符串,切割字符串等头文件:string.h相关函数:strlen作用:测量字符串长度语法:size_tstrlen(constchar*s);    参数:s:要测量的字符串的首地址    返回值:测量的字符串串长度注意:不包含......
  • C语言_算法例题_PAGE2
    算法例题求1x2x3x4x5#include<stdio.h>intmain() { inti,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf("%d\n",t); return0; {求1x3x5x7x9#include<stdio.h>voidmain() { inti,j; ......
  • c语言中块作用域的优先级高于文件作用域
     001、[root@PC1test]#lstest.c[root@PC1test]#cattest.c#include<stdio.h>inta=100;//该变量具有文件作用域intmain(void){printf("a=%d\n",a);//在程序快中调用外部变量return0;}[root@PC1test]#gcctest.c-......
  • C语言_入门例题_PAGE1
    入门例题在屏幕上输入一行信息#include<stdio.h>intmain() { printf("ThisisaCprogram.\n"); return0; }求两个整数之和#include<stdio.h>intmain() { inta,b,sum; a=123; b=456; sum=a+b; printf("sumis%d\n",sum);//%d是指定输......
  • Java的反射、网络模型、枚举知识点
    一、反射(Reflection)概念:反射是Java的一种特性,它允许程序在运行时检查和操作类及其属性、方法和构造器。主要功能:获取类的信息:可以通过Class对象获取类的名称、父类、接口、构造器和方法等。javaClass<?>clazz=Class.forName("com.example.MyClass");StringclassName......
  • C语言实例_1之从4个不重复的数中,找出3个不重复的数的集合
    题目有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?分析可填在百位、十位、个位的数字都是1、2、3、4,组成所有的排列后再去掉不满足条件的排列。实例代码#include<stdio.h>//程序入口intmain(){ //[0]定义了三个整型变量`i`、`j`......
  • 密码转换与还原-C语言语法练习
    文章目录前言本文源代码网址:https://gitee.com/zfranklin/c-language-grammar-practice编写一个密码转换机制二、字符串输入输出地址不同指针类型数组名是指针函数传参传地址数组名无法被赋值'0'与'\0'取模符号%表示循环总结前言最初想写一个专栏《从0开始学C语言》......
  • Java多态调用成员的特点 C语言调试过程
    1.publicclassanimal{Stringanme="dongwu";publicvoidwork(){System.out.println("animal....");}}classdogextendsanimal{@Overridepublicvoidwork(){System.out.println("dog.....&qu......
  • 初识C语言(上)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、C语言是什么?二、初学之路1.编译器的选择2.我的第一个C语言程序3.main函数、printf和库函数1.main函数2.printf和库函数总结前言例如:为了参加职业技能大赛,学习单片机、Python、和Li......
  • C语言:结构体
    1.结构体的定义结构体是C语言中一种用户自定义的数据类型,它允许将不同类型的数据组合在一起。定义结构体的一般形式为:struct结构体名{数据类型成员1;数据类型成员2;//...数据类型成员n;};例如,定义一个表示学生信息的结构体:structStudent......