当前位置:网站首页>第一部分——第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
边栏推荐
- IT industry salary has been far ahead! Ten years later, is the programmer still a high paying profession?
- 为什么需要使用API管理平台
- PHP generates unique strings
- Swagger介绍和应用
- Solution to cross domain problem of front end separation
- One minute comprehensive understanding of forsage smart contract global shared Ethereum matrix plan
- Wechat applet related
- experiment
- How does the system response time and throughput change with the increase of concurrency pressure during performance pressure testing
- 【Elasticsearch 技术分享】—— 十张图带大家看懂 ES 原理 !明白为什么说:ES 是准实时的!
猜你喜欢

Countdownlatch explodes instantly! Based on AQS, why can cyclicbarrier be so popular?

后缀表达式转中缀表达式

abp(net core)+easyui+efcore实现仓储管理系统——出库管理之五(五十四)

How much faster is a server equipped with a SSD than a mechanical hard disk

单例模式的五种设计方案

Creating a text cloud or label cloud in Python

AI香水来了,你会买吗?

Package subsystem in Simulink

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

Solution to cross domain problem of front end separation
随机推荐
使用Fastai开发和部署图像分类器应用
Why need to use API management platform
Chapter 2 programming exercises
佛萨奇forsage以太坊智能合约是什么?以太坊全球滑落是怎么回事
Introduction to latex
Array acquaintance
线程池运用不当的一次线上事故
awk实现类sql的join操作
Five phases of API life cycle
一分钟全面看懂forsage智能合约全球共享以太坊矩阵计划
Python 列表的11个重要操作
Introduction and application of swagger
实验
Jsliang job series - 07 - promise
给大家介绍下,这是我的流程图软件 —— draw.io
Express framework
Liteos message queuing actual combat
使用基于GAN的过采样技术提高非平衡COVID-19死亡率预测的模型准确性
VirtualBox install centos7
Talk about go code coverage technology and best practices