引用和指针的差别,数组和指针的差别
一:引用和指针的差别
1:引用并不是对象,它仅仅是为一个已存在的对象所起的另外一个名字。必须初始化,并且无法改变它绑定的对象,之后每次使用这个引用都是訪问最初绑定的那个对象。
2:指针本身是对象,能够不用初始化,能够改变指针指向的对象
二:指针与数组的差别
指针 |
数组 |
保存数据的地址 |
保存数据 |
间接訪问数据 |
直接訪问 |
通经常使用于动态数据结构 |
通经常使用于存储固定数目数据类型同样的元素 |
相关操作malloc(),free()等 |
隐式分配和删除 |
同常指向匿名数据 |
自身即为数据名 |
在C语言中对于以下的两种情况,是否同样呢?
char a[] = "abcdefg";---------------1
char *p = "abcdefg";-----------------2
在谈到这些差别时。应该先谈一下计算机中对变量是怎样存储的。从编译原理中我们知道,对于全部的变量他都会影射到一个符号表中。为了简化。这里给出一种最简单的便于理解的符号表:
a |
0xffaa |
p |
0xffcc |
表1 一个简单的符号表演示样例
以上表格中a代表一个变量。0xffaa则为变量a的内容的存储地址。p代表还有一个变量。0xffcc为变量p的内容的存储地址。对于数组型的变量和指针型的变量,其地址代表的含义不同。
对于数组a:
这个0xffaa地址就是其存放数组内容的首地址了。
对于a[i]的引用过程例如以下:
步骤一、取出i的值,将他与0xffaa相加;
步骤二、取出为(0xffaa+i)中的内容。
对于指针p:
这个0xffcc地址存放的不是字符串的内容,而是一个地址,这个地址才是字符串的首地址,对p[i]或者用指针表示*(p+i)的应用过程例如以下:
步骤一、取出0xffcc地址中的内容。比如为0xffdf;
步骤二、取出地址0xffdf中的内容。
还要提醒一点的就是:
char a[] = "abcdefg";---------------数组内容能改动(字符数组)
char *p = "abcdefg";-----------------内容不能改动(字符串常量)
在ANSI C中,初始化指针是所创建的字符串时常量,被定义为仅仅读,假设试图通过指针改动这个字符串的值,程序就会出现为定义的行为。
更具体的能够參考:http://wenku.baidu.com/view/678d1925a5e9856a561260b1.html
引用和指针的差别,数组和指针的差别相关推荐
- C语言 数组的指针和指向数组的指针变量
一.回顾二维数组和多维数组的概念 int a[3][4]; //二维数组 int a[2][3]4]; //多维数组 二.指向多维数组的指针和指针变量的探究 可以把a看成是一个一维数组,这个一维数 ...
- 深入浅出C语言:(三)C 语言数组指针(指向数组的指针)
目录 一.C 语言数组指针(指向数组的指针) 二.C 语言字符串指针(指向字符串的指针) 三.C 语言指针数组(数组每个元素都是指针) 四.二维数组指针(指向二维数组的指针) 五.指针数组和二维数组指 ...
- 区分指向数组元素的指针、指向数组的指针、指针数组
区分指向数组元素的指针.指向数组的指针.指针数组 指向数组元素的指针 这类指针比较常见,例如 int a[3] = {1, 2, 3}; int *p; p = a;//将数组的地址(也即数组首元素的 ...
- 二维数组的传参【01_数组指针_指向数组的指针】
2021-04-08 二维数组的传参[01_数组指针_指向数组的指针] #include <stdio.h> #include <stdint.h> #include < ...
- C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...
- c语言 指针(1) 指向数组的指针
关于输入地址 疑惑:既然这里的p1 p2代表ab的地址,就是系统随机的一串数字,为啥针对p1p2的输入,输入的就是内容值,而不是输入改变他的地址值 解答:scanf需要传入的参数本来就是地址 如sca ...
- C语言 数组的指针和指向数组的指针变量-2
一.数组名作为函数参数 如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以有 4 种: (1)实参和形参都是数组名 a 是实参数组首地址,那么ba是形参数组首地址,a和ba共 ...
- 第三节 数组的指针和指向数组的指针变量
目录 一.指向数组元素的指针变量的定义和赋值 二.通过指针引用数组元素 三.数组名作为函数参数 四.指向多维数组的指针和指针变量探究 五.指针数组和数组指针 一.指向数组元素的指针变量的定义和赋值 数 ...
- C指针4:数组指针(指向数组的指针)
先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...
- 对C语言 结构数组 指向结构变量的指针 指向结构数组的指针
一.结构数组的定义 数组的元素可以是结构类型的.结构数组的每一个元素都是具有相同的结构类型的下标结构变量.在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体. 如:一个班的学生的档案,一个车 ...
最新文章
- 移动端自动播放音视频实现代码
- 如何绕过chrome的弹窗拦截机制
- 年终福利 | 京东虚拟平台团队问答专场
- SAP WebIDE里本地运行Fiori应用后,会自动生成一个新的Destination
- 微软全新Chromium版Edge浏览器下载
- MySQL入门 (二) : SELECT 基础查询
- 不同价格段用户购买手机关注的功能
- web前端开发初学者十问集锦(3)
- Php保护数据库连接信息,php连接数据库,哪里填自己的数据库信息啊,能⭕下吗?我乱填后总是服务器正在维护。代码如下...
- linux6.5修复引导,CentOS 6.5 修复grub引导
- Android UI学习之RadioButton和RadioGroup
- [2018.07.31 T1] 第一题
- android sdk集合 下载,Android SDK下载列表(含海内下载)-下
- Matlab绘制直方图、概率密度函数、累积分布函数
- 能上QQ但是打不开网页
- 获取Unique reads方法
- 遮罩层 遮挡不住 flash曲线的解决办法
- wisp5.0 学习日记2
- vue中加载腾讯地图(html形式)
- “着色器”是什么意思? 如何使用HTML5和WebGL创建它们
热门文章
- ROS-Rtabmap:linux shell运行多个shell(运行多个程序)
- java基础学习(一)hashcode
- Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
- CImageList类Create函数参数解析
- apache建立虚拟主机[转载]
- Symbian 资源文件解析
- check your cluster UI to ensure that workers are registered and have sufficient resources
- octave修改选中的代码行的颜色
- ubuntu下面的背光键盘的使用
- nonzero的用法一则例子