3.1、指针到底是什么?

3.1、指针到底是什么?

3.1.1、指针变量和普通变量的区别

(1) 首先必须非常明确:指针的实质就是个变量,它跟普通变量没有任何本质区别(把指针当普通变量来理解)。
(2) 指针完整的名字应该叫指针变量,简称指针。

3.1.2、为什么需要指针?

(1) 指针的出现是为了实现间接访问,在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址。
(2) 间接访问(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了汇编之上的C语言也必须实现间接寻址。
(3) 高级语言如Java、C#等没有指针,那么他们怎么实现间接访问呢?答案是语言本身帮我们封装了。

3.1.3、指针使用三部曲

定义指针变量、关联指针变量、解引用
(1) 当我们int *p定义一个指针变量p时,因为p是局部变量,所以也遵循C语言局部变量的一般规律(定义局部变量并且未初始化,则值是随机的),所以此时p变量中存储的是一个随机的数字。
(2) 此时如果我们解引用p,则相当于我们访问了这个随机数字为地址的内存空间,那这个空间到底能不能访问不知道(也许行也许不行),所以如果直接定义指针变量未绑定有效地址就去解引用几乎必死无疑。
(3) 定义一个指针变量,不经过绑定有效地址就去解引用,就好像哪一个上了膛的枪随意转了几圈,然后开了一枪。
(4) 指针绑定的意义就在于:让指针指向一个可以访问、应该访问的地方(就好像拿着枪瞄准目标的过程一样),指针的解引用是为了间接访问目标变量(就好像开枪是为了打中目标一样)

#include<stdio.h>

int main(void)
{
    int a = 23;
    //演示指针的标准使用方式
    //指针使用分3步:定义指针变量、给指针变量赋值(绑定指针)、解引用(使用、赋值)
    
    //1,定义指针变量
    int *p;
    printf("p = %p, Randomly address value\n", p);
    // printf("p = 0x%x\n", p); //%p和%x打印指针,打印出来的值是一样的

    //2,绑定指针,其实就是给指针变量赋值,也就是让指针指向另一个变量。当我们没有绑定指针变量之前,这个指针不能被解引用。
    p = &a;  //实现指针绑定,让p指向变量a
    printf("p = %p\n", p);

    //3,解引用,如果没有绑定指针到某个变量就去解引用,几乎一定会出错
    *p = 555;   //把555放入p指向的变量中

    printf("a = %d\n", a);
    printf("*p = %d\n", *p);
    printf("p = %p\n", p);

    return 0;
}

返回:C语言指针系列目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值