2.C语言数据类型

数据类型

引言:

​ 计算机是人类用来解决问题的工具---->计算机如何来解决问题?------>计算

​ 计算需要数据, 我们想让这个数据去运算----->那么我们首先要考虑的问题是------>如何将这个数据保存起来

​ 保存的位置在哪里 -> 内存------>所以操作内存实际上就是为了操作数据

​ 由于内存是有大小的 ,不可能给你一个数据开无限的空间------->所以需要一个机制来控制你这个数据开多少空间

​ ----------->这个东西就是数据类型

​ 由此可知:数据类型实际上就是数据的属性

一、c语言里面的数据类型

基本类型:

​ c语言给你定义好了的你直接用就可以了

​ (signed) int/unsigned int 整型 分配4个字节 signed可以省略

​ (signed) char/unsigned char 字符型 分配1个字节

​ (signed) short/unsigned short 短整型 分配2个字节

​ (signed) long/unsigned long 长整型 分配4个字节

​ (signed) long long/unsigned long long 长长整形 分配8个字节

​ 浮点型(小数)

​ float 单精度 分配4多个字节

​ double 双精度(默认) 分配8个字节

注:

​ 在32位里面 :int和long都是4个字节,没有任何区别 ,long long是8个字节

​ 在64位里面: long是8个字节, long long 也是8个字节

构造类型:

​ 程序员自己定义的类型

​ 如:数组、结构体、联合体、枚举

指针类型: *

​ int * p // int类型的指针,指向整型数据,读取4个字节的数据

​ char * p // char类型的指针,指向字符型数据,读取1个字节的数据

空类型 : void

​ 1 用作函数的返回值 表示这个函数没有返回值

​ void function()

​ {

​ return;

​ }

​ 2 用在函数的参数位置 表示这个函数没有参数

​ void function(void)

​ {

​ return;

​ }

​ 在新一点的编译器里面 这个参数位置的void是可以省略的

​ 3 void * -> 指针的最高境界 通用指针

​ 只要你是一个指针 就可以接受

​ 相关链接:https://blog.csdn.net/walle2018/article/details/80359972?spm=1001.2014.3001.5506

二、字符型与整型数据(重点)

​ 注意计算机里面只能运行数据(数字) 没有图形的概念

​ 我们要保存图形怎么办 -> 只能用一个数字去代表一个图形

​ A -> 65

​ 在c语言里面 字符是用’'引起来的

​ char sb = ‘A’;

​ if(‘A’ == 65) //是真的

​ char sb = 65;

三、常量与变量

​ 常量:程序在运行的过程中间,不能改变它的值的这些东西 我们就叫常量

​ 常量在c语言里面有很多种

1.整型常量

​ 一个整数 你不能改变这个整数的意义 因此这个整数是不变的

​ 常量是放在一个叫只读存储区的一个东西里面

​ 只能读不能写

​ 整数的表示方法有:

​ 十进制整数

​ 八进制整数 : 一个数代表的是3个bit

​ 十六进制 整数:一个数代表的是4个bit

​ 底层在实现的时候都是以字节为单位, 因此,我们表示这个字节用16进制会非常的方便

​ 拓展:

​ rwx -> 我们可以用这个8进制的一个数来表示权限

​ r 读权限,w 写权限,x 执行权限

​ 八进制 二进制

​ 0 000

​ 1 001

​ 2 010

​ 3 011

​ 4 100

​ 5 101

​ 6 110

​ 7 111

​ chmod u + x 给所有者(u)添加执行权限,详情链接如下:

​ https://blog.csdn.net/weixin_40744265/article/details/95202412?spm=1001.2014.3001.5506

2. 字符常量

​ 实际就是一个字符

​ 字符在计算机里面不是保存的它的形状

​ 它保存的是一个整数 -> 代表了某一个形状

​ ASCII码 -> man ASCII

​ man -> 查看函数手册

字符的存储位置:

​ char a = ‘A’ ------> 它会放在一个只读存储区里面

​ char * s = ‘A’; —>s指向的是一个只读存储区

​ ASCII 说明:

​ 是美国对于信息交换的标准代码。它是7位码。 许多8位码(比如 ISO

​ 8859-1, Linux 的默认字符集)容纳 ASCII 作为它们的下半部分。对应的国际

​ ASCII 是 ISO 646。

3.字符串常量:

​ 字符是一个常量 那么字符串也是一个常量

字符串结尾:

​ ‘\0’ -> 0 计算机里面 字符串的结尾必须是 \0

​ strlen ->遇到第一个\0就结束

​ char a = ‘\0’; // char a = 0;

​ char * s = “penglei”; ->这个字符串的长度是7 但是它所占的空间为8个字节,最后有一个\0

字符与字符串的写法区分:

​ ‘’ -> 字符

​ “” -> 字符串

字符串的存储位置:

​ “penglei” ------> 它也会放在一个只读存储区里面

​ char * s = “penglei”; —>s指向的是一个只读存储区

​ char c = *s; //可以,只读,没有改变s指向只读存储区的值

​ *s = ‘A’; //不可以,只读不可写,s指向的是只读存储区,不允许被写入新的值

​ char c = s[1]; //可以,只读

​ s++; //可以,指针向后移了一位,只读存储区的值未受到改变

​ char s1[] = “penglei”; -> 数组名放在栈内存,数组元素放在堆内存

​ *s1 = ‘A’; //可以,堆内存的值可以被重新写入

​ s1++; //不可以,s1指向的是数组首地址,数组首地址不能被改变

四、内存分配:

​ 一个程序在运行的时候 操作系统会给这个程序分配一个8M的空间

​ 这8M里面又划分了很多块

​ .text -> 只读存储段 存放代码(指令)

​ .bss -> 可读可写 没有初始化的全局变量和static变量会放此

​ .data -> 可读可写 以初始化的全局变量和static变量会放在此

​ .rodata -> 只读存储段 只能存放只读的数据

​ 栈空间 -> 可读可写 存放局部变量 出来局部就会被释放

​ 局部变量->在大括号里面的就是局部

​ 全局变量->在大括号外面的

​ 堆空间 -> 动态内存分配

​ 这个空间一个显著的特点---->就是用完不会释放

​ 我们需要手动free

​ 它可以向系统要内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值