当前位置:网站首页>第一部分——第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
边栏推荐
- Countdownlatch explodes instantly! Based on AQS, why can cyclicbarrier be so popular?
- Summary of interface test case ideas
- TypeScript(1-2-2)
- Proficient in high concurrency and multithreading, but can't use ThreadLocal?
- Opencv solves the problem of ippicv download failure_ 2019_ lnx_ intel64_ general_ 20180723.tgz offline Download
- Dynamic ReLU:微软推出提点神器,可能是最好的ReLU改进 | ECCV 2020
- What is forsage Ethereum smart contract? What is the global decline of Ethereum
- SQL 速查
- Come and have a look! What is the relationship between AQS and countdownlatch?
- 深拷贝
猜你喜欢
随机推荐
机械硬盘随机IO慢的超乎你的想象
Interesting article sharing: what is the difference between C language and C + +, C?
C / C + + knowledge sharing: function pointer and pointer function, can you understand after reading this article?
Countdownlatch explodes instantly! Based on AQS, why can cyclicbarrier be so popular?
experiment
进程 线程 协程
Introduction and application of swagger
Common memory leakage scenarios in JS
解决go get下载包失败问题
为什么需要使用API管理平台
Creating a text cloud or label cloud in Python
opencv 解决ippicv下载失败问题ippicv_2019_lnx_intel64_general_20180723.tgz离线下载
Mongodb add delete modify query operation
Your random IO hard disk
AI perfume is coming. Will you buy it?
Process thread coroutine
Proficient in high concurrency and multithreading, but can't use ThreadLocal?
Simulink中封装子系统
Wechat applet related
Come and have a look! What is the relationship between AQS and countdownlatch?