您现在的位置是:群英 > 开发技术 > 编程语言
C语言指针的定义、作用及用法是什么
Admin发表于 2022-11-11 17:47:05725 次浏览
在这篇文章中我们会学习到关于“C语言指针的定义、作用及用法是什么”的知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望对大家学习或工作能有帮助。下面就请大家跟着小编的思路一起来学习一下吧。


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 = &num;

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; // 野指针

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

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

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

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

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

  • 指针变量所指向的内存初始释放后要及时赋值为空(堆内存)。

  • 不返回局部变量的地址。


感谢各位的阅读,以上就是“C语言指针的定义、作用及用法是什么”的内容了,通过以上内容的阐述,相信大家对C语言指针的定义、作用及用法是什么已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注群英网络,群英网络将为大家推送更多相关知识点的文章。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: c语言指针
相关信息推荐
2022-05-12 17:34:16 
摘要:html隐藏样式的方法是,给元素添加hidden属性即可,例如【<p hidden="hidden">隐藏的段落</p>】。hidden属性可以对元素进行隐藏,同时隐藏的元素不会被显示。
2022-06-20 17:01:36 
摘要:不用bootstrap的理由:1、Bootstrap的可扩展性、重用性以及维护性方面都表现不好,这大大增加了网站开发者的工作量和工作难度;2、不易融合使用,它容易与现有设置发生冲突;3、文件太大,无用内容太多,容易导致网站加载速度慢。
2022-10-08 17:52:23 
摘要:php 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部