C语言的知识合集

1 指针

1.1指针是什么?

指针理解的2个要点:
1.指针是内存中一个最小单元的编号,也就是地址
2.平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量

int a = 10; //a是整形变量,4个字节空间
int* p = &a; //P是指针变量,用来存放a的地址。
1.2指针变量占用的空间大小?

在32为平台地址是4个字节,在64为平台地址是8个字节
补充:8个bit位一个字节。
16进制中2个数字表示一个字节 可能性= 进制^个数 (金戈铁马)
16^2 = 2^8

1.3关于指针解引用的注意事项

1.指针类型决定这指针解引用到底访问几个字节
2.决定这指针解引用时以何种数值类型去解读内存中的数据

int a = ox11223344;
char* p = (char*)&a;
*p = 0;//此时 a为 OX11223300 why?
int*float*  都是4个字节,是否可以混用?
答:不行,因为intfloat数据存储型式不同,在解引用时,同一块数据,int类型的解读数来的值,和float解读出来的数据不一致。
注意:int unint flaot 存储型式不同,

小知识:int 和uint 正数存储型式一致,
int >>>uint int负数+2^8
uint >>>int uint-2^8
int 和float存储型式完全不同,差距很大

1.5 指针初始化
int* p = &a; //  p与*结合   指向int类型
int* *Ph = &p; // p与*结合  指向int*类型(一级指针)
int** *phh = &ph;//p与*结合  指向int**类型(二级指针)
1.6 指针+1和-1

跳过一个数据类型的存储字节

补充:char 1字节 int 4字节 flaot 4字节

char* p= &a;
p = p+1;//跳过一个char类型占用空间字节数(1字节)

int* pi = &b;
pi = pi+1;//跳过一个int类型占用空间字节数(1字节)
*VP++ = 0 和(*VP)++ = 0; 的区别?
*VP++ = 0*VP=0 ,在VP++//++最近的是 VP++*VP)++ = 0;*VP=0 ,在(*VP)++//++最近的是 (*VP)++
解析:++在后面,最后才++,先运行除了++之外的语句,也就是先运行(*VP)=0;在运行(与++结合最近的)语句++
1.7 指针 - 指针

指针 - 指针的绝对值 = 指针和指针之间元素的个数

int arr[10] = { 0 };
printf("%d\n",&arr[9]-&arr[0]);// #9
printf("%d\n",&arr[0]-&arr[9]);// #-9

在这里插入图片描述

1.8 野指针:

野指针的二种情况:1.未初始化 2.指针越界 3.引用函数内部的局部变量

1.未初始化
int *P;//局部变量P没有初始化,会放入一个随机值,那么在解引用的时候会访问哪里我们不得而知。野指针
*P = 10;

2.指针越界
int arr[10] = { 0 };  //arr[10] 会越界
int *P = arr;
for(i=0;i<=10;i++)
{
   *P = i;
   p++;
}

3.引用函数内部的局部变量
int* test()
{
   int a=10;
   retrun &a;
}
int main()
{
   int*P = test(); //出了函数,函数内部的空间会被回收。出函数后。a这块空间会回收,此时我们使用这块空间不合法,里面的值也有可能已经被篡改。
   
}

2. 函数

2.1 函数的定义
2.2 常用的函数

3. 字符串

3.1 字符串的存储

字符结尾 " \0 ",表示后面没有字符。

int len = my_strlen("abcdef");    

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值