指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)
指针:
指针是变量,和平时的那些变量没有本质的差异,不同的只是它的值和类型,、,即解释方式
二进制层面:指针的值是内存单元的地址,而变量是引用内存单元值的别名
语言层面:指针的值就是变量的地址。
对象的内存地址就是它的指针。
类型名和“*”组合起来一个指针类型,但是“*”是与后面的指针变量名先结合的
void*指针不能参加算术运算
不能对字面常量来取址,因为它是保存在符号表中的
数组:
数组是内存中的一段连续内存,
下标操作符返回的就是元素的引用,当使用[]时,其实编译器自动的将其转化为指针的表示形式,再编译
数组名本身就是一个指针,一个指针常量。
数组传递:
数组不能从函数返回,但是数组可以作为函数的参数
一维数组-----数组作为函数参数时并非是传递整个数组的内容,而是退化为一个同类型的指针。
多维数组-----转化为其等价的数组指针。
字符串,字符数组,/0:
字符数组是类型为char的字符数组
字符串是以/0结束的字符数组,他是可变长的
引用与指针:
&是C++引入的新概念
引用在创建的同时必须先初始化,即必须引用到一个有效的对象,而指针则不需要,可以是NULL,可以在之后再赋值
不存在一个NULL的引用,引用必须关联到有效的存储单元
不要用字面值常量来初始化引用
引用一旦被初始化为一个对象,就不会再被修改为另一个对象(从一而终)
类的引用的创建不需要调用构造函数和析构函数
在语言层面引用的用法和对象的用法一样,而在二进制层面,编译器会自动将其转化为指针,所以引用既具有指针的效率
又具有变量使用的方便性和直观性。
指针,数组,字符串的区别(高质量程序设计指南C++/C语言第7章)的更多相关文章
- 高质量程序设计指南C/C++语言——C++/C程序设计入门
1.在C++/C中,全局变量(extern或static)存放在程序的静态数据区中,在程序进入main()之前创建,在main()结束之后销毁,因此在我们的代码中根本没有机会初始化它们,于是语言及其实 ...
- 高质量程序设计指南C/C++语言——内存管理
• free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...
- 高质量程序设计指南C/C++语言——C++/C程序设计入门(4)
*switch结构的break语句只是一个“jmp”指令,其作用就是跳到switch结构的结尾处 *标准C++/C语言提供3种循环:do/while.while和for,它们都在条件表达式为TRUE( ...
- 高质量程序设计指南C/C++语言——C++/C程序设计入门(2)
*标准C规定,编译器只取前31个字符作为有效的标识符,而标准C++则取前255个字符作为有效的标识符. *把具有特殊含义的字符输出到终端上,尤其是当它们出现在普通字符串或格式控制字符串中时,一般来说有 ...
- 高质量程序设计指南C/C++语言——malloc/free使用要点
- 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?
- 高质量程序设计指南C/C++语言——C++/C常量(2)
- 高质量程序设计指南C/C++语言——C++/C编译预处理
C++/C的编译预处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段.预编译伪指令一般都以#打头,且其前面只能出现空白字符.预编译伪指令不是C++/C ...
- 高质量程序设计指南C/C++语言——C++/C常量
随机推荐
- 亲身经历,Java面试题整理
博主在2015年暑期参加过一些Java开发工程师实习的面试和笔试,在此将重点整理出来,以供大家学习. 资料1: 一.单继承 1.1Java类是否支持多重继承? 答:继承的基本原则是: 子类继承父类的所 ...
- laravel权限控制Gate
实现思想 注册 位置: app/Providers/AuthServiceProvider.php $permissions = \App\AdminPermission::all(); foreac ...
- 通过HA方式操作HDFS
之前操作hdfs的时候,都是固定namenode的地址,然后去操作.这个时候就必须判断namenode的状态为active还是standby,比较繁琐,如果集群使用了HA的形式,就很方便了 直接上代码 ...
- 洛谷 P2604 [ZJOI2010]网络扩容
题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. ...
- Android(java)学习笔记163:开发一个多界面的应用程序之界面间数据传递
1.界面跳转的数据传递 (1)intent.setData() --> intent.getData(): 传递的数据比较简单,一般是文本类型的数据String:倘若我们传递的数据比较复 ...
- linux之awk命令
一.awk的内置参数 $0:表示整个当前行 $1:每行第一个字段 $2:每行第二个字段 $n:每行第n个字段 awk的参数:分隔符 -F separator 设定分隔符(默认为空格) 打印单个字段: ...
- this.$refs.tabs.activeKey ref就是vue里面的id
this.$refs.tabs.activeKey ref就是vue里面的id
- 1.1 Qt入门
学习Qt的前提是学好C++. 我刚入门Qt,打算趁着暑假2个月时间来学习<C++ GUI Qt 4>这本书. 现在有Qt4和Qt5,似乎很多公司都还是在使用Qt4,所以我也就选择了学习Qt ...
- mybatis-使用junit测试与main方法测试结果不一致问题
今天使用ieda写mybatis程序感觉太不友好了,而且也没找到问题所在.问题:写的user.xml中的语句与输出的语句不一样.尝试了各种办法都没有解决. mybatis配置的使用的查询实体.xml ...
- SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
有两种类型的空间数据.geometry 数据类型支持平面或欧几里得(平面球)数据.geometry 数据类型符合适用于 SQL 规范的开放地理空间联盟 (OGC) 简单特征 1.1.0 版. 另外,S ...