对于c语言指针的了解

  1. 什么是指针?

       

指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作。 

指针描述了数据在内存中的位置,标示了一个占据存储空间的实体,在这一段空间起始位置的相对距离值。在 C/C++语言中,指针一般被认为是指针变量,指针变量的内容存储的是其指向的对象的首地址,指向的对象可以是变量(指针变量也是变量),数组,函数等占据存储空间的实体。

指针一种特殊的数据类型,使用指针可以定义变量,这个变量就叫做指针变量

 指针变量中存储的是整型数据,代表了内存编号,通过这个编号可以访问对应的内存

    2.为什么要使用指针

1、函数之间相互独立,但有时是需要共享变量

            传参是单向传递

            全局变量容易命名冲突

            使用数组还需要额外传长度

            命名空间是独立的,但是地址空间是同一个

以上几点都是我们需要使用指针的情况

2、由于函数之间传参是值传递(内存拷贝),对于字节数较多的变量,值传递效率较低,如果传递的是变量的地址,只需要传递4/8个字节,可以提高传参效率

3、堆内存无法取名,他不像 data,bss,stack 内存段可以让变量名与内存之间建立联系,只能使用指针记录堆内存得到地址,以此来使用堆内存

3.如何的使用指针

先来看看指针的定义:       

                定义: 类型* 变量名_p;

1、指针变量与普通变量是有很大区别的,建议在取名时以p结尾加以区分

2、指针类型表示存储的是什么类型数据的地址,他决定了通过这个指针变量可以访问的字节数

3、一个 * 只能定义一个指针变量   

int* p1,p2,p3;   //此时只有p1是指针变量,p2,p3是int类型
 
int *p1,*p2,*p3;  //p1,p2,p3都是指针变量
4、指针变量与普通变量一样的是默认值是随机的,一般都要初始化为 NULL 

                赋值    变量名_p = 地址;   //必须是有权限并有意义的地址

                通过赋值指向栈内存:

                            int* p = #

                通过赋值指向堆内存:

                            int* p = malloc(4);

                 解引用:        *变量名_p;

                 通过指针变量中记录的内存编号去访问内存,该过程可能产生段错误,根源是由于赋值时存储了一个非法的内存编号

                            *p  <==>  num

                   注意:解引用是访问的字节数取决于定义指针变量时的类型

                  

空指针:值为NULL的指针变量叫做空指针,如果进行解引用就会产生段错误

NULL 会作为错误标志的一种表示执行错误,当一个函数的返回值是指针类型时,函数如果执行出错返回值就是 NULL 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值