__c语言__结构体、共用体、枚举__笔记
2017-09-16 21:14:09
结构体,共用体,枚举
1.结构体
把不同的类型整合成一个有机的整体,以便于引用,这个类型就叫做结构体
1)结构体变量的定义方式(3种)和引用成员变量;
定义一个结构体的一般形式为
struct 结构体名
{
成员表列(成员类型 成员名);
};
!!!成员名可以和变量名重名!!!
可以采取三种方式定义结构体类型变量
a.先声明结构体类型再定义变量名
struct student
{
int num;
char name[20];
float score;
char address[30];
};
struct student stu1,stu2;
***************************************************
b.在声明类型的同时定义变量
一般形式为:
struct 结构体名
{
成员表列;
}变量名;
struct student
{
int num;
char name[20];
float score;
char address[30];
}stu1,stu2;
struct student stu3;
***************************************************
c.直接定义结构体类型变量
一般形式为:
struct
{
成员表列;
}变量名表列;
struct
{
int num;
char name[20];
float score;
char address[30];
}stu1,stu2;
struct stu3; 错误
"." 引用成员变量
***************************************************
2)结构体成员的内存布局问题及字节对其问题;
a.结构体的数据成员,第一个数据保存在offset为0的地方,以后每个数据成员存储的起始地址要从
该成员大小的整数倍或者是4的整数倍开始(取两者中的最小值);
b.如果一个结构体里面有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍开始
或者是4的整数倍开始(取两者中的最小值);
c.结构体总大小,必须是内部最大成员的整数倍或者是4的整数倍(取两者中的最小值);
3)柔性数组与指向结构体类型的指针
#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[])
{
struct soft_array
{
int len;
int array[];//占座位
}; /*
struct student stu1;
stu1.len = 10;
stu1.array[0] = 'a'; struct student *p = &stu1; printf("%d\t%c\n",(*p).len,(*p).array[0]);
printf("%d\t%c\n",p->len,p->array[0]);
//printf("%d\n",stu1->len); 错误
//
*/
int n;
scanf("%d",&n);//单元个数
struct soft_array *p = (struct soft_array *)malloc(sizeof(int)*n);
if(p == NULL)
{
perror("malloc error");
return -;
}
p->len = n; int i;
for(i = ;i < n -;i++)//len 已经占用了一个int,所以array占用的int个数为n-1
{
p->array[i] = +i;
printf("%d\t",p->array[i]);
}
return ;
}
->(指向运算符) 只能是指针使用
4)结构体数组
struct student
{
int num;
char name[20];
float score;
char address[30];
}struct student stu[10];
5)结构体做函数参数
#include<stdio.h> struct student
{
int num;
char name[];
float score;
char address[];
}; void func(struct student *a)
{
printf("%d %s\n",a[].num,a[].name);
} int main(int argc,char *argv[])
{
struct student stu1[] = {,"xiaoming",,"BeiJing"};
func(stu1);
return ;
}
------------------------------------------------------------------------
2.共用体
所有成员共用同一段内存空间,空间有多大,视其中最大成员而定,
他们的首地址都相同!!!
定义共用体的方式和结构体前两种方式一样!!!
union 共用体名
{
成员表列;
};
大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,
而数据的低字节,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:
地址由小向大增加,而数据从高位往低位放;
小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,
而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,
高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
判断是小端模式还是大端模式:
#include<stdio.h>
int main(int argc,char *argv[])
{
union test
{
int a;
char b;
}; union test t;
t.a = 0x12345678;
//printf("%p %p",&t.a,&t.b);
printf("%x\n",t.b);
return ;
}
------------------------------------------------------------------------
3.枚举
enum 枚举名 {成员}
枚举类型在内存中间占据4字节的unsigned int !!!
#include<stdio.h>
int main(int argc,char *argv[])
{
enum day {Monday=,Friday=, Sunday};
enum day Tuesday = ; //要求赋值是给到的枚举出来的类型
printf("%d %d %d %d\n",Monday,Tuesday ,Friday,Sunday); return ;
}
__c语言__结构体、共用体、枚举__笔记的更多相关文章
- C语言高级-结构,共用体,文件,链表
C语言结构 标准声明方式 struct student{ int age; char sex; }; 这个可以在main函数中定义: struct student ...
- 5、数组&字符串&结构体&共用体&枚举
程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...
- C++结构、共用体、枚举
一.结构 结构是C++OOP的基石.学习有关结构的知识僵尸我们离C++的核心OOP更近. 结构是用户定义的类型,同一个结构可以存储多种类型数据,这使得将一个事物的不同属性构成一个对象成为了可能.另外C ...
- C语言-10-位域与共用体
位域 在某种特定情况下,一个结构体中的多个变量只使用各自存储空间的几位,而其他位从来不使用.这种情况下,可以使用位域来限定每个变量的用来存储数据的位宽. 作用 限定结构体中变量用来存放数据的位宽,即使 ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
- C语言基础 (11) 结构体 ,共用体 枚举 typedef
1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...
- C++复合类型(结构,共用体,枚举)
•结构是用户定义的类型,而结构的声明定义了这种类型的数据属性. 一.关键字struct声明: 定义了一种新类型 struct inflatable{ char name[20];//结构成员 fl ...
- C语言中结构、联合、枚举的说明
复杂的数据类型 一般的步骤: 1.声明模板 2.定义变量,分配内存空间 3.初始化 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- C语言------结构体和共用体
仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...
随机推荐
- 清北合肥day2-day5
day2:215这一天的题目相对比较模板化t1:50看错了数据范围求n个点到给出的点哈夫曼距离的最小值我想到的是一种非常zz的做法我们二分答案,然后判断是否在这个距离内有点但是这样前缀和不是很好维护于 ...
- net core体系-web应用程序-4net core2.0大白话带你入门-6asp.net core配置文件
asp.net core配置文件 读取配置文件 asp.net core使用appsettings.json代替传统.net framework的web.config中的<appSettin ...
- nginx安装,运行(ubuntu)
文本只涉及单节点nginx 安装gcc g++依赖库 apt-get install build-essential apt-get install libtool 安装pcre依赖库 apt-get ...
- quratz线程
1.线程 在 Quartz 中,有两类线程,Scheduler 调度线程和任务执行线程,其中任务执行线程通常使用一个线程池维护一组线程. 2.调度线程 下面说明两种调度线程: Scheduler 调度 ...
- day73 中间件 以及模板引擎
模板引擎: 基本实用{{k1}} if for 模板中自定义函数:操作步骤 1在已经注册的App中创建一个名字叫templates文件夹 2任意创建一个py文件, 3创建名字叫register 的L ...
- Linux 常用基本指令
1.ls 参数: -a:列出所有目录(“.”开头的是隐藏文件) -l: 以长格式列出目录下的内容列表 2.cd cd 切换到家目录 cd ~ 切换到家目录 cd .. 切换到上一级目录 3.pwd ...
- TF之RNN:TensorBoard可视化之基于顺序的RNN回归案例实现蓝色正弦虚线预测红色余弦实线—Jason niu
import tensorflow as tf import numpy as np import matplotlib.pyplot as plt BATCH_START = 0 TIME_STEP ...
- B - Glider Gym - 101911B(二分)
output standard output A plane is flying at a constant height of hh meters above the ground surface. ...
- 用Eclipse上传项目到github
1.安装EGit插件 点击菜单栏help->Eclipse Marketplace 2.配置Git 这里是配置相关账户信息 3.把项目提交到本地仓库 右键项目->Team->Shar ...
- CodeForces 1117C Magic Ship (循环节+二分答案)
<题目链接> 题目大意: 给定起点和终点,某艘船想从起点走到终点,但是海面上会周期性的刮风,船在任何时候都能够向四个方向走,或者选择不走,船的真正行走路线是船的行走和风的走向叠加的,求船从 ...