1 数据类型详细介绍
1.1 内置类型
1.11 整形家族
整形家族:
当然还有long 和 longlong等。
1.12 浮点型家族:
float(单精度) 和 double (双精度),他们也分有符号和无符号
1.2 自定义类型
1.21 数组类型
数组类型的类型名是除了数组名之外的其他部分:如,int arr[10];类型名是int [10]
int arr[10] = { 0 };//整形数组
char arr1[10] = { 0 };//z字符串数组
·········
1.22 结构体类型
如下面这个是结构体类型,他的类型是 sturct stu
//创建一个学生的结构体类型
struct stu
{
int age;
char ID[20];
char name[20];
char tele[20];
}s1;
1.23 枚举类型和联合类型
枚举类型的关键字是 enum; 联合类型的关键字是 union;
//枚举类型
enum sex { MALE, FEMALE};
1.3 指针类型
指针类型有很多:
如:
一级指针:
int * pi;
char * pc;
float * pf;
void * pv;
除了这些,还有很多其他的,但这里我想重点说一下void * pv ;
void * ;类型的指针,可以接受任意类型的地址,但是对于void *类型的指针 ——> 不能进行解引用操作,同时也不能进行指针的“+,-”整数操作:均是因为不知道访问多少个字节。
二级指针
二级指针是存放一级指针地址的。
int* * ppi = π//pi是一级指针
数组指针
存放数组地址的指针。
指针名是parr,指针指向的对象是 int [10],这个对象是一个整形数组,数组有10个元素。
int (* parr)[10];
函数指针
存放函数地址的指针、
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int a = 10;
int b = 20;
//函数指针,第一个 int是函数的返回类型,括号里面的两个int,是函数的参数类型
int (*pa)(int, int) = &Add;
//(*pa)(10, 20)是调用函数指针,也可以写成pa(10,20);
printf("%d",(*pa)(10,20));
return 0;
}
1.4 空类型
void 表示空类型(无类型),一般是用在函数的返回值
//第一个void 表示无返回值,第二个void 表示没有参数
void print(void)
{
printf("hehe\n");
}
变量的创建是要开辟空间,空间的大小是根据不同的类型决定的
2 整形在内存中的存储:源码,反码,补码
2.1 整形数据的存放
对于整形来说:数据存储到内存中是以二进制补码的表示形式储存
原因:
- 保证了0的唯一性,保证了数的表示的准确性。
- 让加减可以统一处理,优化了数的运算过程。
- 解决了自身逻辑意义的完整性。
cpu只有加法器,所有的加法,减法是统一处理的。使用补码,可以将符号位和数值域统一处理;此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
整形数据的打印是以源码的形式转到十进制打印的。
2.2 源码,反码,补码
对于有符号数 最高位表示符号位 : 0 ——> 正, 1 ——> 负
对于无符号数,最高位表示数值,所以源码,反码,补码都相同
3 大小端字节序介绍及判断
3.1 数据在vs编译器内存中是倒着存
按照正常情况 a在内存中是以11 22 33 44 的顺序存储,但是在VS内存中却是以44 33 22 11存储。
3.2 大端/小端字节序存储模式的介绍
大端字节序存储:是指数据的低位字节序内容存放在内存的高地址中;而数据的高位字节序内容存放在内存的低地址中。
小端字节序存储:是指数据的低位字节序内容存放在内存的低地址中;而数据的高位字节序内容存放在内存的高地址中。