c语言指针有什么用
创始人
2024-11-18 03:01:23
0次

c语言指针用法:1、指针变量与普通变量一样默认值不确定,一般初始化为NULL;2、指针变量的用法与普通变量不同,一般以p结尾加以区分;3、指针变量的类型决定了通过指针变量访问内存时访问几个字节。

c语言指针用法:

一,指针定义:

指针变量的取值范围取值0~4G,是一种数据类型(无符号整数,代表了内存编号)。它可以用来定义变量(与int、long一样),与int、long不同的它存储整数代表了内存的编号,通过这个变量可以访问对应编号的内存。

二,指针的作用

1、堆内存无法取名字(无法使用标识符与堆内存建立联系),必须配合指针。

2、函数之间的参数是值传递(内存拷贝),使用指针可以优化参数的传递效率(需要对变量进行保护)。因为C语言采用的是值传递(内存拷贝),会随着变量字节数的增加而降低运行效率而传递变量的地址永远只拷贝4或8字节。

void func(const int* p);但使用指针变量的值可能会被修改,可以配合const。

3、函数之间是相互独立的,有时协同配合需要共享变量(全局变量过多会造成命名冲突,不会被释放浪费内存),函数之间传递变量的地址可以达到共享变量的效果。

三,指针的用法:

定义:类型* 变量名_p;  

1、指针变量与普通变量一样默认值不确定,一般初始化为NULL。

2、指针变量的用法与普通变量不同,一般以p结尾加以区分。

3、指针变量的类型决定了通过指针变量访问内存时访问几个字节。

4、指针变量不能连续定义(一个*只能定义出一个指针变量):

 int* p1,p2; // p是指针,p2是int类型变量

 int *p1,*p2; // p1和p2都是指针变量

赋值:指针变量 = 内存编号。   变量名_p = 地址;

内存编号要能够访问,如果编号错误可能会造成段错误。void*可以与任意类型指针进行自动转换(C++中不行)。要保障地址与物理内存有对应关系(映射过),否则有段错误。

 int* p = malloc(4);
 int* p = # // 引用内存

访问:*指针变量 //解引用----访问指针变量

根据指针变量中存储的内存编号去访问对应的内存。如果之前赋值的内存编号有误,这个步骤会出现段错误。访问的字节由指针类型决定。     int* p = #                   *p <=> num;

5,指针运算

指针变量中存储的就是整数,因此为整型数据能使用的运算符指针变量基本都能使用

,但不是所有运算都有意义。

指针+整数 = 指针+宽度*整数

指针-整数 = 指针-宽度*整数 // 指针进行前后移动

指针-指针 = (指针-指针)/宽度 // 两个指针之间相隔多少个元素

指针 >、<、<=、>= 指针 可以判断两个谁在前谁在后。

6,数组与指针

.数组名就是个特殊的地址,也能当指针使用,数组名是个常量(数组名与数组第一个元素的首地址是对应关系,普通指针是指向关系)。数组名可以使用指针的解引用,而指针变量也可以使用数组的[];arr[i] <=> *(arr+i)。数组当函数的参数就脱变成了指针变量,长度丢失,安全性也变小void func(int * const arr,size_t len);

7,指针的高级使用

数组指针与指针数组:

(1).数组指针(指针):专门用来指向数组的指针。

int arr[10];
int (*p)[10] = arr;
int* p = #

void func(int I,int J,int(*arr)[J]) //二维数组 函数传参使用数组指针

(2).指针数组(数组):一个数组里存储的数据类型是指针。

把无序的离散数据,归纳到一起。

int* arr[3]; <=> int *p1,*p2,*p3;

(3).二级值针: 指向指针的指针

4.函数指针: 指向函数的指针(不能解引用)

9,const 指针

const int * p; // 不能通过解引用去修改指针所指向的内存的数据

(1)保护函数的参数

(2)当指针指向的是只读数据,也应该加上const防止出现段错误。

int const * p; // 同上

int* const p; // 不能修改指针变量的值

可以防止指针变量意外变成野指针

const int* const p; // 既保存指针所指针的内存,也保护指针变量

int const * const p; // 同上

运行:

*p_num=10
请输入一个数字:1
*p_num是1
*ptr=10

10,注意事项:

空指针:

  • 变量指针的值等于NULL,这种指针叫空指针。

  • 不能对空指针解引用,一定会出现段错误。

  • 当操作重启时会跳转NULL地址,进行重启,因此NULL存储操作系统用于重启的数据。

  • NULL在C语言中是一种错误标志,如果函数的返回值是指针类型,

  • 结果一旦NULL表示函数执行出错或失败。

如何避免空指针造成的段错误?

使用来历不明(函数的参数)的指针前先进行检查,if(NULL == p)。

野指针:指针变量的值不确定,使用野指针不一定会出错。

int* p; // 野指针

使用野指针的后果:段错误。

注意:野指针是无法分辨的,所以比空指针危害更。

如何避免野指针造成的错误?

  • 所有的野指针都人制造出来的,只要人人都不制造野指针就会有野指针造成的错误。

  • 定义指针变量时一定要初始化。

  • 指针变量所指向的内存初始释放后要及时赋值为空(堆内存)。不返回局部变量的地址。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...