C语言深入了解指针(1)

目录

1.内存和地址

2.指针变量和地址

2.1 取地址操作符(&)

2.2 指针变量和解引⽤操作符(*)

 2.2.1 指针变量

2.2.2 如何拆解指针类型

2.2.3 解引⽤操作符

2.3 指针变量的⼤⼩

3.指针变量类型的意义

3.1 指针的解引⽤

3.2 指针+-整数

3.3 void* 指针 

3.3.1 void* 指针的作用

4.const 修饰指针

4.1 const修饰变量

 4.2 const修饰指针变量 

5.指针运算

5.1 指针+- 整数

 5.2 指针-指针

 5.3 指针的关系运算(两个指针比较大小)

6. 野指针

6.1 野指针成因

 6.2 如何规避野指针

6.2.1 指针初始化

6.2.2 ⼩⼼指针越界

6.2.3 指针变量不再使⽤时,及时置NULL,指针使⽤之前检查有效性

 6.2.4 避免返回局部变量的地址

7. assert 断⾔

 8. 指针的使⽤和传址调⽤

8.1 strlen的模拟实现

8.2 传值调⽤和传址调⽤


1.内存和地址

        在计算机中把内存划分为⼀个个的内存单元每个内存单元的⼤⼩取1个字节其中,每个内存单元,相当于⼀个学⽣宿舍,⼀个字节空间⾥⾯能放8个⽐特位,就好⽐同学们住的⼋⼈间,每个⼈是⼀个⽐特位。每个内存单元也都有⼀个编号(即为地址)(这个编号就相当于宿舍房间的⻔牌号),有了这个内存单元的编号,CPU就可以快速找到⼀个内存空间。C语⾔中给地址起新的名字叫:指针。内存单元的编号 == 地址 == 指针。

        计算机中内存大概如下图:

2.指针变量和地址

2.1 取地址操作符(&)

        在C语⾔中创建变量其实就是向内存申请空间,⽐如:

        ⽐如,上述的代码就是创建了整型变量a,内存中申请4个字节,⽤于存放整数10,其中每个字节都有地址。上图中4个字节的地址分别是:

         通过取地址操作符(&)可以获取变量a的地址:

        通过上述第五行的取地址操作,获得变量a的地址为0x006FFD70。 虽然整型变量占⽤4个字节,我们只要知道了第⼀个字节地址,顺藤摸⽠访问到4个字节的数据也是可⾏的。

2.2 指针变量和解引⽤操作符(*)

 2.2.1 指针变量

        我们通过取地址操作符(&)拿到的地址是⼀个数值,⽐如:0x006FFD70,这个数值有时候也是需要存储起来,⽅便后期再使⽤的,那我们把这样的地址值存放在哪⾥呢?答案是:指针变量指针变量也是⼀种变量,这种变量就是⽤来存放地址的,存放在指针变量中的值都会理解为地址。注:我们在学习或工作上口头通常说的指针实际上就是指的指针变量。

2.2.2 如何拆解指针类型

         这⾥pa左边写的是 int* , * 是在说明pa是指针变量,⽽前⾯的 int 是在说明pa指向的是整型(int)类型的对象。

2.2.3 解引⽤操作符

        我们只要拿到了地址(指针),就可以通过地址(指针)找到地址(指针)指向的对象,这⾥必须学习⼀个操作符叫解引⽤操作符(*)。

#include <stdio.h>

int main()
{
    int a = 100;
    int* pa = &a;
    *pa = 0; //对指针pa进行解引用*pa == a ,修改a变量的值
    return 0;
}

2.3 指针变量的⼤⼩

        结论:

        • 32位平台下地址是32个bit位,指针变量⼤⼩是4个字节

        • 64位平台下地址是64个bit位,指针变量⼤⼩是8个字节

        • 注意指针变量的⼤⼩和类型是⽆关的,只要指针类型的变量,在相同的平台下,⼤⼩都是相同的。

3.指针变量类型的意义

3.1 指针的解引⽤

        代码1:

//代码1
#include <stdio.h>

int main()
{
    int n = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值