=============================================================================
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_关于复合类型的复习的更多相关文章

  1. c语言基础学习09_复合类型

    =============================================================================涉及到的知识点有:一.结构体1.定义结构体st ...

  2. C语言基础学习基本数据类型-int类型与int变量

    int类型与int变量 针对不同的用途,C语言提供了多种整数类型.各种整数类型的区别在于所提供数值的范围,以及数值是否可以取负值. 在之前的实例中你已经看到过,int关键字用于声明整型变量. int类 ...

  3. C语言基础学习基本数据类型-Char类型

    char类型 char类型用于储存字母和标点之类的字符.但是在技术实现上char却是整数类型.为了处理字符,计算机使用一种数字编码,用特定的整数表示特定的字符.字符变量输入输出用%c符号.定义语法如下 ...

  4. c语言基础学习08_关于内存管理的复习

    =============================================================================对于c语言来讲,内存管理是一个很重要的内容,它 ...

  5. D02-R语言基础学习

    R语言基础学习——D02 20190423内容纲要: 1.前言 2.向量操作 (1)常规操作 (2)不定长向量计算 (3)序列 (4)向量的删除与保留 3.列表详解 (1)列表的索引 (2)列表得元素 ...

  6. D03-R语言基础学习

    R语言基础学习——D03 20190423内容纲要: 1.导入数据 (1)从键盘输入 (2)从文本文件导入 (3)从excel文件导入 2.用户自定义函数   3.R访问MySQL数据库 (1)安装R ...

  7. Golang 汇编asm语言基础学习

    Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...

  8. Swift语言指南(七)--语言基础之布尔值和类型别名

    原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...

  9. D01-R语言基础学习

    R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理 ...

随机推荐

  1. 关于mysql使用命令行时出现Data too long for column的解决方案:

    方法一: 1,在mysql根目录下找到my.ini文件: 2:将其中sql-mode中的STRICT_TRANS_TABLES这个属性去掉: 3:重启mysql的服务(注意注销电脑不会重启mysql服 ...

  2. 西门子flexable创建画面

    一.wincc flexable 创建画面包括以下四点 二.具体操作 1.组态画面模板 1)使用该模板的画面包括该模板的所有组件,一个模板也是一个画面 2)给模板上添加一个文本域如下图,则画面1也会显 ...

  3. 一张图讲清楚TCP流量控制

  4. Oracle ADG搭建

    Oracle Active Data Guard搭建 一:安装 1.基础环境配置 1.1.开启强制日志记录 DG日志发送方式中ARCH进程和LGWR进程的ASYNC模式都是基于日志同步的,所以我们必须 ...

  5. 微信扫码支付功能详细教程————Java

    前言  首先声明 我并非原创 原创是 http://blog.csdn.net/wangqiuyun/article/details/51241064 我只是在前辈的基础 加以解释说明 还有自己的一些 ...

  6. js必须掌握的基础

    好多人想要学习前端……自学或者培训那么我们在学习过程中到底需要掌握那些基础知识呢!下面分类了JS中必备的知识也是必须要了解学会的!看一看你是否已经将JS的基础知识都了如指掌了呢? 事件: onmous ...

  7. 关于SPF记录的说明

    详细了解SPF记录的可以查看一下这篇博文:http://www.renfei.org/blog/introduction-to-spf.html 关于 SPF SPF:Sender Policy Fr ...

  8. WebDriver的等待方式

    /* * 1.线程休眠 * 2.隐式等待 * 3.显示等待 * */ package com.sfwork; import java.util.concurrent.TimeUnit; import ...

  9. SQL Server Service Broker创建单个数据库会话

    概述 SQL Server Service Broker 用来创建用于交换消息的会话.消息在目标和发起方这两个端点之间进行交换.消息用于传输数据和触发消息收到时的处理过程.目标和发起方既可以在同一数据 ...

  10. CSS3 banner图片的标签效果

    放body看,你懂的:)