一:引用和指针的差别

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

引用和指针的差别,数组和指针的差别相关推荐

  1. C语言 数组的指针和指向数组的指针变量

    一.回顾二维数组和多维数组的概念 int a[3][4];  //二维数组 int a[2][3]4];  //多维数组 二.指向多维数组的指针和指针变量的探究 可以把a看成是一个一维数组,这个一维数 ...

  2. 深入浅出C语言:(三)C 语言数组指针(指向数组的指针)

    目录 一.C 语言数组指针(指向数组的指针) 二.C 语言字符串指针(指向字符串的指针) 三.C 语言指针数组(数组每个元素都是指针) 四.二维数组指针(指向二维数组的指针) 五.指针数组和二维数组指 ...

  3. 区分指向数组元素的指针、指向数组的指针、指针数组

    区分指向数组元素的指针.指向数组的指针.指针数组 指向数组元素的指针 这类指针比较常见,例如 int a[3] = {1, 2, 3}; int *p; p = a;//将数组的地址(也即数组首元素的 ...

  4. 二维数组的传参【01_数组指针_指向数组的指针】

    2021-04-08 二维数组的传参[01_数组指针_指向数组的指针] #include <stdio.h> #include <stdint.h> #include < ...

  5. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  6. c语言 指针(1) 指向数组的指针

    关于输入地址 疑惑:既然这里的p1 p2代表ab的地址,就是系统随机的一串数字,为啥针对p1p2的输入,输入的就是内容值,而不是输入改变他的地址值 解答:scanf需要传入的参数本来就是地址 如sca ...

  7. C语言 数组的指针和指向数组的指针变量-2

    一.数组名作为函数参数 如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以有 4 种: (1)实参和形参都是数组名 a 是实参数组首地址,那么ba是形参数组首地址,a和ba共 ...

  8. 第三节 数组的指针和指向数组的指针变量

    目录 一.指向数组元素的指针变量的定义和赋值 二.通过指针引用数组元素 三.数组名作为函数参数 四.指向多维数组的指针和指针变量探究 五.指针数组和数组指针 一.指向数组元素的指针变量的定义和赋值 数 ...

  9. C指针4:数组指针(指向数组的指针)

    先明确两个概念:(1和2是两个完全不一样的东西) 1.数组指针:如果一个指针指向了数组(该数组就是普通定义的数组),我们就称它为数组指针(Array Pointer).(1强调的是指针) 2.指针数组 ...

  10. 对C语言 结构数组 指向结构变量的指针 指向结构数组的指针

    一.结构数组的定义 数组的元素可以是结构类型的.结构数组的每一个元素都是具有相同的结构类型的下标结构变量.在实际应用中,经常用结构数组来表示具有相同数据结构的一个群体. 如:一个班的学生的档案,一个车 ...

最新文章

  1. 移动端自动播放音视频实现代码
  2. 如何绕过chrome的弹窗拦截机制
  3. 年终福利 | 京东虚拟平台团队问答专场
  4. SAP WebIDE里本地运行Fiori应用后,会自动生成一个新的Destination
  5. 微软全新Chromium版Edge浏览器下载
  6. MySQL入门 (二) : SELECT 基础查询
  7. 不同价格段用户购买手机关注的功能
  8. web前端开发初学者十问集锦(3)
  9. Php保护数据库连接信息,php连接数据库,哪里填自己的数据库信息啊,能⭕下吗?我乱填后总是服务器正在维护。代码如下...
  10. linux6.5修复引导,CentOS 6.5 修复grub引导
  11. Android UI学习之RadioButton和RadioGroup
  12. [2018.07.31 T1] 第一题
  13. android sdk集合 下载,Android SDK下载列表(含海内下载)-下
  14. Matlab绘制直方图、概率密度函数、累积分布函数
  15. 能上QQ但是打不开网页
  16. 获取Unique reads方法
  17. 遮罩层 遮挡不住 flash曲线的解决办法
  18. wisp5.0 学习日记2
  19. vue中加载腾讯地图(html形式)
  20. “着色器”是什么意思? 如何使用HTML5和WebGL创建它们

热门文章

  1. ROS-Rtabmap:linux shell运行多个shell(运行多个程序)
  2. java基础学习(一)hashcode
  3. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发
  4. CImageList类Create函数参数解析
  5. apache建立虚拟主机[转载]
  6. Symbian 资源文件解析
  7. check your cluster UI to ensure that workers are registered and have sufficient resources
  8. octave修改选中的代码行的颜色
  9. ubuntu下面的背光键盘的使用
  10. nonzero的用法一则例子