C语言基础总结

常用的数据类型
基于32位操作系统:

void :声明函数无返回值或无参数 (空类型) 1
char :字符型类型数据 1
int :整型数据 4
float :单精度浮点型数据 4
double :双精度浮点型数据 8

short : 短整型数据 2
long : 长整型数据 4

long long : 长长整型数据 8
long double: 长双精度浮点型数据 12

unsigned int: 无符号整型数 4

类型转换
自动类型转换:
在计算机运算的过程中,低精度的数据会自动向高精度的数据进制转换,数据的精度不会丢失。
低 -》 高
1.char -> short -> int ->long -> float -> double -> …
2.同类型的数据,有符号的数据,比无符号的数据精度要高
100/3.0 -> int/float => float -> 33.333333
100/3 -> int/int => int -> 33
强制类型转换:
有时候我们运算数据的时候为了精度更高,往往会利用短暂的强制类型转换。
(对于强制类型转换,在数据上是不推荐使用的,因为强制转换,会使数据的精度丢失)
例如: 数据丢失的例子
float a = 3.14;
printf("%f\n",(int)a); //(int)a 强制类型转换
强制转换一般用于指针!!
int a=10086;
printf("&a:%p\n",&a); //&a -> int 类型
printf("&a->date:%d\n",
((char )&a));
printf("&a+1->date:%d\n",
(((char *)&a)+1));

运算符
算术运算符,关系运算符,逻辑运算符,位运算符,赋值运算符
优先级:高 - 》 低

数组
1.数组名就是数组的首地址 (数组名就是地址!!)
2.数组里面的元素空间的连续的
3.数组名就是首地址,用数组名进行运算 + 或 - 是操作整个类型的大小

二维数组
二维数组的初始化:
1.int a[3][3]={1,2,3,4,5,6,7,8,9}; //根据地址连续的性质赋值

2.int a[3][3]={{1,2,3},{1,2,3},{1,2,3}};//划分成3块,每块赋值1 2 3

3.int a[3][3]={{1},{1,2,3},{0}};//划分成3块,第一块的第一个值为1,其他为0.。

4.int a[3][3]={0}; //对二维数组中的每一个元素赋值
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[1][0]=4;
a[1][1]=5;

a[2][2]=9;

5.带缺省方式赋值
int a[][3]={1,2,3,4,5,6,7,8,9}; //分配的是36个空间刚好

int a[][3]={1,2,3,4};//分配24个空间,因为该类型为int [3]
//第一个int [3] 存放 1 2 3
//第二个int [3] 存放 4 0 0

int a[3][]={1,2,3,4,5,6,7,8,9}; //错误的,类型不能缺省

二维数组的引用:
1.数组名[下标1][下标2] //强烈推荐!

2.(数组名+下标1)+下标2)

指针
作用:存放地址的数据类型
void * -> 4
char * -> 4
short * -> 4
int * -> 4
long * -> 4
int (*a)[10]; -> 4
void (*a)(void *); -> 4

为什么指针的空间大小都是4个字节???
因为指针是用来存放地址的,在32位的操作系统中,地址的最大值为 0xffff ffff
一个空间地址可以存放一个字节的数据,地址的最大值为4个字节,所以我们分配4个地址
空间就可以把32位的操作系统所有地址的存放起来!

为什么需要类型???
1.因为指针在访问数据的时候,需要偏移地址,去获取下一个目标的值,假设
不指定指针的类型,则会出现找不到下一个目标的情况。
2.告诉系统,取多个地址作为完整的数据

指针的定义:
指针的类型 *变量名
例子: char *p=NULL; (注意:定义一个指针出来就需要给他初始值,防止 “野指针”);

指针的类型:
void *a;//万能指针,用他来先存放地址,以后转换成需要的类型
char *a;//字符串指针,指向字符串
short *a; //短整型指针,指针一个短整型
char **a; //二级指针,保存char *指针的地址
char *a[10];//看优先级,[]优先级高,所以是一个数组,数组中保存了10个char *的指针
char (*a)[10];//先看优先级 ()优先级高,所以是一个指针,指向char [10]的类型
void *a(void *arg); //函数,返回值为void * 参数也为void *
void *(*a)(void *arg);//(*a)优先级高,所以是函数指针 ,指向返回值为void * 参数也为void *的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值