当前位置:网站首页>第一部分——第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
边栏推荐
- Flink系列(0)——准备篇(流处理基础)
- C / C + + knowledge sharing: function pointer and pointer function, can you understand after reading this article?
- Function classification big PK! How to use sigmoid and softmax respectively?
- Not a programmer, code can't be too ugly! The official writing standard of Python: pep8 everyone should know
- Suffix expression to infix expression
- write文件一个字节后何时发起写磁盘IO
- I used Python to find out all the people who deleted my wechat and deleted them automatically
- Package subsystem in Simulink
- npm install 无响应解决方案
- iptables从入门到掌握
猜你喜欢

Come and have a look! What is the relationship between AQS and countdownlatch?

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

An online accident caused by improper use of thread pool

npm install 无响应解决方案

进程 线程 协程

AI香水来了,你会买吗?

Express framework

Flink系列(0)——准备篇(流处理基础)

Solve the failure of go get download package

What is forsage Ethereum smart contract? What is the global decline of Ethereum
随机推荐
使用K3S创建本地开发集群
Interesting article sharing: what is the difference between C language and C + +, C?
[elastic search technology sharing] - ten pictures to show you the principle of ES! Understand why to say: ES is quasi real time!
Django之简易用户系统(3)
If the programming language as martial arts unique! C++ is Jiu Yin Jing. What about programmers?
解决go get下载包失败问题
一分钟全面看懂forsage智能合约全球共享以太坊矩阵计划
Flink系列(0)——准备篇(流处理基础)
Common memory leakage scenarios in JS
进程 线程 协程
SQL 速查
SQL 速查
Creating a text cloud or label cloud in Python
Liteos message queuing
使用Fastai开发和部署图像分类器应用
使用基于GAN的过采样技术提高非平衡COVID-19死亡率预测的模型准确性
Proficient in high concurrency and multithreading, but can't use ThreadLocal?
Package subsystem in Simulink
How much faster is a server equipped with a SSD than a mechanical hard disk
Python 列表的11个重要操作