当前位置:网站首页>第一部分——第2章指针操作
第一部分——第2章指针操作
2020-11-08 19:28:00 【李隶浩】
在C 语言中,对于任何类型T,都可以在T所在的内存地址处产生一个包含此对象地址的对应变量。这种变量,实际上是一种指向对象的变量,因此,这些变量称为指针。
指针是构建数据结构和操作内存的精确而高效的工具。
章节结构
- 指针基础
- 存储空间分配
- 数据集合与指针的算术运算
- 作为函数参数的指针
- 指向指针的指针
- 泛型指针与类型转换
- 函数指针
指针基础
一个指针存储数据在内存的地址而不是存储数据本身。
理解指针的最佳方法:绘制图表。
- 指针通常都是按位置用箭头一个一个链接起来,而不是在图标中画出实际的地址。
- 当指针补指向任何数据,,也就是说指针被设置成NULL时,用两条竖线来表示。
- 悬空指针:指向无效地址的指针。
可能产生悬空指针的一些错误示例:将任意的整型变量强制转换为指针变量;操作超出数组边界的指针;释放一个或多个仍被引用的指针。
存储空间分配
指针变量的大小通常与编译器的设定以及某些特定的C实现中的类型界定符有关。
- 必须记住:当声明一个指针时,仅仅只是为指针本身分配了空间,并没有为指针所引用的数据分配空间。
为数据分配空间的两种方法:
- (1)直接声明一个变量
- (2)在运行时动态的分配存储空间(例如:使用malloc或realloc)。
当声明一个变量,发生了什么
当声明一个变量时,编译器会根据变量的类型预留足够的内存空间。
变量的存储空间是系统自动分配的,但是此存储空间不会在程序的整个生命周期中永久存在。
自动变量是一种在进入或离开一个模块或函数时其存储空间能够自动分配和释放的变量
在C 语言中,当想要动态分配存储空间时,会得到一个指向一个堆存储空间的指针(第3章),此存储空间由我们自行管理,并且会一直存在,除非我们显式的将它释放。
作为函数参数的指针
在C 语言的函数调用中指针起着至关重要的作用。最重要的是,指针支持将参数作为引用传递给函数(即按引用调用)。
按引用传递参数时,当函数改变此参数时,这个被改变参数的值会一直存在,甚至函数退出后仍然存在。 当按值调用传递函数时,此时值得改变只能持续到函数返回时。
使用指针传递大容量复杂的函数参数是一种高效的方法:因为只是传递一个指针而不是一个数据的完整副本到函数中,这样可以大大地节省内存空间
按引用调用传递函数
版权声明
本文为[李隶浩]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4445379/blog/4708312
边栏推荐
- PAT_ Grade A_ 1056 Mice and Rice
- Function classification big PK! How to use sigmoid and softmax respectively?
- Talk about go code coverage technology and best practices
- CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?
- TypeScript(1-2-2)
- C / C + + knowledge sharing: function pointer and pointer function, can you understand after reading this article?
- PHP generates unique strings
- 【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!
- Liteos message queuing
- LiteOS-消息队列-实战
猜你喜欢

如果把编程语言当武功绝学!C++是九阴真经,那程序员呢?

C / C + + knowledge sharing: function pointer and pointer function, can you understand after reading this article?

Express framework

Mongodb database

解决go get下载包失败问题

给大家介绍下,这是我的流程图软件 —— draw.io

习题五

CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?

Not a programmer, code can't be too ugly! The official writing standard of Python: pep8 everyone should know

Use markdown
随机推荐
go语言参数传递到底是传值还是传引用?
Python 列表的11个重要操作
net.sf.json . jsonobject's format processing of time stamp
API生命周期的5个阶段
PAT_ Grade A_ 1056 Mice and Rice
微信小程序相关
read文件一个字节实际会发生多大的磁盘IO?
实验
趣文分享:C 语言和 C++、C# 的区别在什么地方?
Is parameter passing in go language transfer value or reference?
python开发qt程序读取图片的简单流程
Why need to use API management platform
RSA asymmetric encryption algorithm
佛萨奇forsage以太坊智能合约是什么?以太坊全球滑落是怎么回事
Flink系列(0)——准备篇(流处理基础)
Solution to cross domain problem of front end separation
git操作与分支管理规范
如何将PyTorch Lightning模型部署到生产中
PHP generates unique strings
Creating a text cloud or label cloud in Python