目录

一.基本类型

1.1.整型int

1.2.实型(浮点型)

1.3.字符型char

二.构造类型

2.1.数组类型[]

2.1.1.字符数组

2.1.2.一维数组

2.1.3.二维数组

2.1.4.三维数组

2.2.结构体类型struct

2.2.1.定义

2.2.2.结构体变量

2.2.3.结构体数组

2.2.4.指向结构体的指针

2.2.5.指向结构体数组的指针

2.2.6.函数

2.3.共用体类型

2.4.链表

2.4.1动态数据结构

2.4.2.基本操作

三.枚举类型

四.指针类型

4.1.内存空间

4.2.引用

4.3.指针变量

4.4.一维数组与指针

4.4.1使用指针变量引用数组元素

4.4.2数组名作形参实际上就是一个指针变量存放首地址

4.4.3.指向字符的指针变量和字符数组的区别

4.5.多维数组和指针

4.5.1.二维数组与指针

4.5.2指针数组

4.5.3.main函数

4.5.4.函数和指针

4.5.5.stdlib.h

五.空类型


一.基本类型

1.1.整型

  • 分类

  • 存储形式

  • 大小:有符号:最小-32768;最大负数:-1;最大:32767;无符号u/U:最小0,最大65535
  • D(DEC):十进制; O(OCT):八进制; B(BIN):二进制;0x/0X:十六进制

1.2.实型(浮点型)

注意:e之前必须要由数字,e之后的指数必须为整数

1.3.字符型char

  • 字符常量(ASCII码:0-255)

  • 字符变量:存放字符常量,1个字节,8位
  • 字符串常量

二.构造类型

2.1.数组类型[]

数组是具有相同类型的一组有序数据的集合,数组在内存中占用一段连续的存储空间

2.1.1.字符数组

  • 专门存放字符的,且数组的每一个元素只能存放一个字符;
  • 注意输入时的空格和换行符
  • 注意""和''的区别

2.1.2.一维数组

  • 数组定义

类型名 数组名[常量表达式]

注:

1)常量表达式(确定数组的长度):可以包含整型的常量和符号常量,不能包含变量。

2)C语言不允许对数组的长度动态定义。

3)数组一经定义,C语言编译系统就在内存中分配一段连续的空间,用来存储数组个元素的值;

4)数组名表示一端连续空间的起始地址

  • 数组引用

数组名[下标],例:a[5],a[i+j]

注:下标:可以是整型,也可以是整型表达式;只能是逐个引用,循环

  • 数组的初始化

若没有对数组元素赋值,则其值是随机值;初始化是在给数组分配空间时进行的赋值。

1)完全初始化     int a[10]={1,2,3,4,5,6,7,8,9,10};

2)部分初始化    int a[10]={1,2,3,4,5};

3)省略数组长度初始化    int a[]={1,2,3,4,5,6,7,8,9,10};

注:部分初始化,没有赋值的自动补0或0.0;如果超出长度,编译会出错;省略数组长度的初始化,有多少个元素,就默认是多少长度

2.1.3.二维数组

  • 数组定义

  • 数组引用

  • 初始化

2.1.4.三维数组

  • a[2][3][4];
  • 可以想象成一本书,一共有2页,每一页有3行4列

2.2.结构体类型struct

2.2.1.定义

结构体类型可以嵌套定义

2.2.2.结构体变量

系统为定义的结构体变量分配内存空间,可以对变量进行赋值,存取,运算

1.定义

1)先定义结构体类型,再定义结构体变量

struct结构体名  结构体变量名表

2)在定义结构体类型的同时定义结构体变量

struct 结构体名{结构体成员表}结构体变量名;

3)在定义结构体类型时省略结构体名,直接定义结构体变量

struct(结构体成员表)结构体变量名表;

注:无结构体名的结构体类型无法重复使用

2.内存空间大小

3.引用

  • 结构体变量名.成员名
  • 同类型的结构体变量可以直接赋值

4.初始化

  • 初始化数据的数据类型及顺序要和结构体类型定义中的结构体成员相匹配
  • 不可以跳过成员,但可以只给前面的成员赋值,此时未赋初值的由系统根据数据类型自动赋初值

2.2.3.结构体数组

  • 具有相同的结构体类型
  • struct 结构体名 数组名[常量表达式]

2.2.4.指向结构体的指针

1.定义一个指针变量,可以指向结构体类型struct student

struct student *ps;
//该指针就是结构体变量在内存所占用的存储空间的首地址

2.(* 结构体指针变量名).结构体成员名

注:必须要有圆括号

3.指向成员运算符:->

4.一个结构体指针变量只能用来指向同类型的结构体变量/结构体数组元素,不能使它指向某一成员

2.2.5.指向结构体数组的指针

++p->score
    (++p)->score
    (p++)->score

2.2.6.函数

  1. 结构体变量作函数参数——值传递
  2. 结构体指针变量作函数参数——地址传递
  3. 函数的返回值为结构体类型

2.3.共用体类型

  1. 分配到同一段内存空间的不同的数据在存储时采用互相覆盖的技术
  2. 共用体变量所占用的空间长度是各成员中占据内存空间最大的那个成员的长度
  3. 定义与变量定义和结构体类似
  4. 共用体变量.成员名;指针变量
  5. 共用体变量中起作用的是最后一次存放的成员
  6. 同类型结构体变量之间可以相互赋值
  7. 可以出现在结构体定义中,也可以定义共用体数组

2.4.链表

2.4.1动态数据结构

1.单向链表

2.4.2.基本操作

  1. 创建链表
  2. 遍历链表
  3. 添加结点
  4. 删除节点

三.枚举类型

值有范围限定

enum 枚举名{枚举值列表}
  1. 枚举值列表:常量标记符;序号从0开始排序;
  2. 可以显式赋序号,后面未赋值的就是前一个的序号增1
  3. 可以直接得到用枚举常;也可以利用序号强制转换得到值
  4. 可以比大小,按照序号比较
  5. 枚举值不能直接输入和输出,与switch

四.指针类型

4.1.内存空间

以字节为单位的存储单元,编号——地址;内容——值

4.2.引用

1.直接引用

x=6

通过标识符(变量名)存取变量的值;直接修改值,而不关系具体内存单元地址

2.间接引用

  • 一个数据所占用空间的首地址又称为这个数据的指针(常量),存放指针的变量称为指针变量(变量)
  • 变量的首地址(指针)——变量p(指针变量)
//通过p中存储的值找到变量所占用的内存空间,间接的访问/修改变量x的值*px=6

4.3.指针变量

  1. 一个指针变量可以被赋予不同的指针值。(指针变量可以指向不同的对象,但不能同时指向多个对象)
  2. 一定要有明确的指向,必须赋予具体的值,否则可能会修改到其他不确定的重要数据,甚至死机
  3. 指针变量的值时内存地址

4.4.一维数组与指针

偏移量:由该数组相对于数组首元素的位置及每个数组元素所占存储空间大小决定

*(a+3)==>a[3]

数组名(数组的首地址)==>指向数组首元素的指针常量

4.4.1使用指针变量引用数组元素

1.可以使用下标方式引用数组元素

//例:p=a或p=&a[0]
//访问数组第i个元素a[i]   //数组下标:*(a+i)//数组首地址加偏移量:p[i]   //指针下标:*(p+i)   //指针变量加偏移量:p++;p--    //指针移动

2.指向同一数组的元素的指针

比较运算——元素在数组中的前后顺序

指针的减法运算——数组元素之间的个数

3.数组名与指针变量区别

指针变量在执行期间可以改变,p++合法
数组名是数组的首地址,是指针常量,a++不合法

4.4.2数组名作形参实际上就是一个指针变量存放首地址

  1. 数组名作为形参时,只是作为一个指针变量用来存放实参数组的首地址。并没有在被调用函数中为其分配一段连续的内存空间用来存放数组元素;
  2. 此时数组名做形参时是指针变量可以++。
  3. 指针变量做形参时与数组名相同,因此这时两者是等价的。

4.4.3.指向字符的指针变量和字符数组的区别

  • 意义

指针变量是一个变量,用于存放字符串的首地址,可以自增
        字符数组名代表首地址,是常量,不能进行自增

  • 初始化方式

字符数组名不能直接进行操作;
        字符指针:char * str="scwv"==>char *str;str="scevs"

  • 使用指针更方便快捷
  • 字符串转数组,相比较

4.5.多维数组和指针

4.5.1.二维数组与指针

  1. a[4][3]四行三列

2.顺序排序

3.通过行指针

类型标识符(* 行指针变量名)[长度]

形参为二维数组名实质上就是定义一个行指针变量

4.5.2指针数组

int * p[5]

类型标识符 * 指针数组名[长度]

4.5.3.main函数

只能有2个; main(int argc,char * argv[])

argc:命令行中参数的个数(文件名本身也是一个参数);

argc的值在输入命令行时由系统按参数实际的个数自动赋予

argv:指向字符的指针数组,值为命令行中各字符串的首地址(系统将命令行参数看作字符串表列)

4.5.4.函数和指针

函数指针变量:把函数的入口地址赋给一个指针变量,该指针就指向函数

4.5.5.stdlib.h

提供了一组用于动态内存分配的函数;

供用户在程序执行时申请内存空间以及释放不再需要的内存空间

1. void * malloc(unsigned size)
        如果分配成功,返回被分配内存的 void *类型的指针
        若没有可用的内存,返回NULL指针
2. void * calloc(unsigned n,unsigned size)
        如果分配成功,返回被分配内存的 void *类型的指针
        若没有可用的内存,返回NULL指针
3. void * realloc(void * ptr,unsigned size)
        分配成功:将原数据从头到尾拷贝到新分配的内存空间,并释放原来ptr所指向的内存空间,同时返回指向新分配内存的 4.void *类型的指针
        分配不成功,就不修改原有数据,并返回NULL
5. void free(ptr)
        只有通过动态分配函数分配的空间才能通过free释放

五.空类型

null

C语言数据类型——基本类型,构造类型,枚举类型,指针类型相关推荐

  1. c语言switch不可以用枚举,76-枚举类型用在switch中

    由于枚举类型是整数类型,所以可以使用枚举类型的变量控制switch. 下面是一个例子 这个switch 传入today 然后去配对case 后面的值.如果配对上了 就执行.#include #incl ...

  2. c语言中指针的类型,学习C语言中的指针类型

    摘要:结合我院学生十年来参加全国计算机等级考试(C语言部分)情况,通过分析成绩分布与题型关系,我们发现指针方面的题型失分率最高.在此基础上结合教学实际,本文提出学习指针知识的方法和顺序过程,并将其应用 ...

  3. C语言中指针类型的意义

    引言: C语言中不同的数据类型其在计算机内部的存储方式不同,占用内存大小也不同,这是我们能看到的给整型.浮点型...这些区分类型的直接原因. 指针有很多类型,但是无论是哪种类型的指针本质上它们的值都是 ...

  4. C语言边角料:结构体中指针类型的成员变量,它的类型重要吗?

    一.前言 昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个 Warning! 本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部, 指向结构体类型的指针成员变量导致的问题. 这个 ...

  5. c语言中-1%3=,c语言数据类型.ppt

    c语言数据类型 C语言程序设计 贵州大学电气工程学院 测控技术与仪器教研室 王民慧 本章主要内容: 3.1 C的数据类型 基本类型 构造类型 指针类型 空类型 C语言中的数据类型如下所示: 一.常量与 ...

  6. c语言数据类型(内含static的使用)

    目录 一.数据的类型 1.基本类型 (1).整形 (2).浮点型 (3).字符型 (4).空类型 2.自定义类型(构造类型) 3.指针类型 二.数据类型的大小及取值范围 三.数据类型的应用 1.变量 ...

  7. 语言与golang语言运行速度_Golang语言情怀第3期 Go 语言数据类型

    本期给大家聊下Go语言的数据类型有哪些,数据类型用于声明函数和变量.数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存. Go 语言 ...

  8. Go基础:指针地址、指针类型、多重指针、指针运算

    目录 到底什么是指针呢? 指针 指针地址和指针类型 指针取值 指针变量初始化 指针运算符 多重指针 指针运算 到底什么是指针呢? 内存就是一系列有序列号的存储单元,变量就是编译器为内存地址分配的昵称, ...

  9. golang中值类型/指针类型的变量区别总结

    转自:https://segmentfault.com/a/1190000012329213 值类型的变量和指针类型的变量 先声明一个结构体: type T struct {Name string } ...

  10. 指针类型与指针指向类型理解

    今天在看一些C语言面试题时,遇到这样一个题目: #include<studio.h>int main(){unsigned int a = 0xFFFFFFF7;unsigned char ...

最新文章

  1. oracle取本月最后一天是星期几_Oracle取得本月、本年第一天和最后一天
  2. java-回调机制详解
  3. 分布式系统架构常识:CAP理论
  4. POJ 2240题(Floyd)
  5. P1789 【Mc生存】插火把(python3实现)
  6. 五通信算法:五种编码增益比较matlab模拟
  7. 马云等第一代互联网创始人退休,BAT 谁来接手?| 畅言
  8. 2016年CIO的五个优先级
  9. 面试过 3000 位候选人,我发现混得好的年轻人都有这 3 个特质
  10. Tensorflow实现Softmax回归
  11. DSP6678核间通信
  12. html显示vbs变量,VBS 读取 对象某属性已连接的变量的变量名
  13. python判断按键是否按下_Pygame检测是否按下了一个键?
  14. java对接支付宝当面付
  15. EAUML日拱一卒-微信小程序实战:位置闹铃 (19)-发布微信小程序
  16. [HEOI2013]ALO-题解
  17. 美欧股市周一综述:美国股市走低,欧洲股市上涨
  18. 《Python核心技术第二版》笔记
  19. 【Java 解析全国地址】Java 利用正则表达式完美解析全国省市区地址
  20. 海伦公式计算三角形面积

热门文章

  1. 转:为什么说Python是最值得学习的编程语言
  2. Apollo planning之参考线平滑算法
  3. 详解在vue项目中使用render函数
  4. 校园兼职平台青团社获数亿元B+轮融资,蚂蚁⾦服领投
  5. 网易云10万+音乐竟然能用Python一键下载!
  6. 2023计算机Android毕业设计选题推荐(1)
  7. linux服务器监控谁改了文件,linux服务器文件监控
  8. TPS7250QDR稳压器
  9. Win XP仍为占有率第三系统!
  10. 令女人胸部下垂的九大杀手