c语言基础学习09_关于复合类型的复习
=============================================================================
struct A
{
char array[100]; //array不知道在哪里呢?只是告诉c语言编译器有这么一种类型结构。是一种语法形式,不要误解。
int a;
};
struct B
{
char *p = malloc(100); //所以不能这样写!
nt a;
};
int main()
{
struct A a; //此时的array在栈里面。
a.a;
struct A *p = malloc(sizeof(struct A)); //此时的array在堆里面。此时只有一个堆。
p->a; //只有一个堆的时候可以用箭头->。
return 0;
}
--------------------------------------
struct C //占用1个字节,至少1个字节。
{
char a : 2;
char b : 4;
};
struct D
{
char a : 10; //错误的语法,char不能超过8个bit。
char b : 4;
};
struct F //占用8个字节。
{
char a : 2;
int b : 4;
};
-----------------------------------------------------------------------------
struct ABC
{
int a;
int b;
};
struct ABC abc1 = { 1, 2 };
struct ABC abc2 = abc1; //浅拷贝,就是一个简单内存拷贝而已。
--------------------------------------
char array[100] = "hello";
char array2[100];
array2 = array; //不能这么赋值,因为数组名是一个常量,不能作为左值的。
--------------------------------------
struct STR
{
char array[100];
};
struct STR str1 = {"hello"};
struct STR str2;
str2 = str1; //此时str2里面的array的值和str1里面的array值是一样的。因为str2和str1是一个变量名,可以作为左值的。
-----------------------------------------------------------------------------
数组最大的缺点是:如果往数组的两个成员之间插入新的数据,代价很大。因为它的内存是连续的。
而使用堆中的指针变量,只需要添加下,然后让指针重新做一个指向即可。好处:不仅可以做一个有特别多成员的结构,同时还可以自由地去删除、添加元素。
如下图所示:

-----------------------------------------------------------------------------
联合体的常用功能:做可变类型。因为他可以放很多类型,在同一时刻,只有一种类型。
类似于:javascript中好多变量是没有数据类型的。c语言可以通过联合体来实现。
(没有数据类型等价于有好多好多数据类型)
linux下示例代码:
#include <stdio.h> union A
{
int a;
//double b;
char b;
}; int main()
{
union A a;
a.a = ;
a.b = ;
printf("%d\n", a.a); // return ;
}
-----------------------------------------------------------------------------
注意:不要把一个庞大的结构体作为函数的形参,因为在栈里面一定会有一个结构体变量赋值的过程。就是把实参的值赋值给形参,实际上是一个内存拷贝,代价很大。
-----------------------------------------------------------------------------
#define PAI 3.14
double a = PAI;
--------------------------------------
常量是个有限的范围时,一般用枚举enum。
--------------------------------------
typedef struct STR S; //这样S就和int类似了,就成了一个具体的数据类型了。
S s1;
sizeof(S);
S *p = malloc(sizeof(S));
=============================================================================
c语言基础学习09_关于复合类型的复习的更多相关文章
- c语言基础学习09_复合类型
=============================================================================涉及到的知识点有:一.结构体1.定义结构体st ...
- C语言基础学习基本数据类型-int类型与int变量
int类型与int变量 针对不同的用途,C语言提供了多种整数类型.各种整数类型的区别在于所提供数值的范围,以及数值是否可以取负值. 在之前的实例中你已经看到过,int关键字用于声明整型变量. int类 ...
- C语言基础学习基本数据类型-Char类型
char类型 char类型用于储存字母和标点之类的字符.但是在技术实现上char却是整数类型.为了处理字符,计算机使用一种数字编码,用特定的整数表示特定的字符.字符变量输入输出用%c符号.定义语法如下 ...
- c语言基础学习08_关于内存管理的复习
=============================================================================对于c语言来讲,内存管理是一个很重要的内容,它 ...
- D02-R语言基础学习
R语言基础学习——D02 20190423内容纲要: 1.前言 2.向量操作 (1)常规操作 (2)不定长向量计算 (3)序列 (4)向量的删除与保留 3.列表详解 (1)列表的索引 (2)列表得元素 ...
- D03-R语言基础学习
R语言基础学习——D03 20190423内容纲要: 1.导入数据 (1)从键盘输入 (2)从文本文件导入 (3)从excel文件导入 2.用户自定义函数 3.R访问MySQL数据库 (1)安装R ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- Swift语言指南(七)--语言基础之布尔值和类型别名
原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...
- D01-R语言基础学习
R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理 ...
随机推荐
- [数据清洗]-使用 Pandas 清洗“脏”数据
概要 准备工作 检查数据 处理缺失数据 添加默认值 删除不完整的行 删除不完整的列 规范化数据类型 必要的转换 重命名列名 保存结果 更多资源 Pandas 是 Python 中很流行的类库,使用它可 ...
- springBoot系列教程07:异常捕获
发生异常是很正常的事,异常种类也是千奇百怪,发生异常并不可怕,只要正确的处理,并正确的返回错误信息并无大碍,如果不进行捕获或者处理,分分钟服务器宕机是很正常的事 所以处理异常时,最基本的要求就是发生异 ...
- Maven项目不打包*.hbm.xml文件
<build> <finalName>basic</finalName> <plugins> <plugin> <groupId> ...
- MySQL字符串相关函数学习二
① LOWER(str):将字符串转为小写:与此函数具有相同作用的函数有LCASE() 如果参数是小写.数字或其他特殊字符,则返回原数据 ② LEFT(str, len):返回字符串str左边的len ...
- Java Web高级编程(一)
Servlet 一.创建Servlet类 在Java EE中,Servlet用来接收和响应终端用户的请求.Servlet是所有Web应用程序的核心类,是唯一既可以直接处理和响应用户请求,也可以将处理工 ...
- openldap 编译报错MozNSS not found
openldap 编译报错 1)报错 MozNSS not found - please specify the location to the NSPR and NSS header files i ...
- SpringMVC 支持使用Servlet原生API作为目标方法的参数
具体支持一下类型: * HttpServletRequest * HttpServletResponse * HttpSession * java.security.Pricipal * Locale ...
- angular4.0快速import依赖路径
快捷键:ALT + ENTER 直接import对应的依赖路径
- vue实现星级评价效果
希望对你们有用,已经自己试过可以的才发布出来的 效果如下: html: <template> <div class="evaStar"> <ul cl ...
- 第十三章:Python の 网络编程进阶(二)
本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 cre ...