一、指针:内容是指示一个内存地址的变量;类型是指示编译器怎么解释指针内容指向地址中的内容,以及该内存区域有多大;
例子:
[cpp]
int i = 0;
int * pi = &i;
printf(“pi = %x \n”, pi); // 打印pi的内容: 0x2000
printf(“*pi= %d \n” , *pi); // 打印pi指向地址中的值: 5
printf(“&pi= %x \n”, &pi); // 打印pi的地址: 0x100
从汇编的角度来看,指针是这样的:
int i = 0;
010E139E mov dword ptr [i],0
int * pi = &i;
010E13A5 lea eax,[i]
010E13A8 mov dword ptr [pi],eax
二、数组:是一个单一数据类型对象的集合。其中单个对象没有被命名,通过索引访问证券从业代考 期货从业代考
数组名和指针的区别:数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组。数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量。指向数组的指针则是另外一种变量类型,仅仅意味着数组的存放地址
注意:虽然数组名可以转换为指向其指代实体的指针,但是它只能被看作一个指针常量,不能被修改,如下护士代考 心理咨询师代考
[cpp]
int intArray[10];
intArray++; // 错误
“指针和数组等价”说的是什么?索引操作相同,例如: p[2]; a[2];
三、引用(reference)是一个对象的别名。用对象初始化引用后,对象的名字和引用都指向该对象;
引用是如何实现的? 从汇编语言的角度来看,指针和引用是一样的:
[cpp]
int i = 0;
00E9139E mov dword ptr [i],0
int & ref = i;
00E913A5 lea eax,[i]
00E913A8 mov dword ptr [ref],eax
int * pi = &i;
00E913AB lea eax,[i]
00E913AE mov dword ptr [pi],eax
指针和引用的区别(从C++使用角度来看):
不存在空引用
引用要初始化
引用初始化后,不能指向另一个对象
这是由编译阶段保证的。
备注:一个指向非常量的引用不能用字面值或者临时值初始化;但是一个指向常量的引用可以会计从业代考 会计职称代考
例子:
[cpp]
double&d = 12.3; // error!
const double& d = 12.3;