数组标识符a和&a表示意义的区别

#include <iostream>
using namespace std;
//数组标识符a和&a表示意义的区别
int main()
{
	int a[]={1,2,3,4,5};
	//a表示是一个一维数组的指针,这个数组中的每个元素都是一个int
	cout << a << endl;
	//&a表示是一个指向一维数组的指针,记录了一个5个单元的一维数组的首地址
	cout << &a << endl;
	//所以a+1相当于a+sizeof(int)
	cout << (a+1) << endl;
	//所以&a+1相当于&a+5*sizeof(int)
	cout << (&a+1) << endl;
	cout << *(&a+1) << endl;//直接输出是一个地址是因为&a中存储的内容本身就是一个地址
	cout << *((int *)(&a+1)-1) << endl;//直接进行类型强转,使用的是&a+1的地址,但是将这个单元的内容用int来呈现
	//就像昨天遇到的把A类的指针强制转换成B类,之后使用B类的函数输出A的数据成员一样。(面试宝典P69)
	//指针类型的强制转换不会影响记录的内容,只是改变寻址的方式,即+1或者-1的时候跳跃的单元数不同(面试宝典P35)

	cout << endl;

	int b[2][3];
	//b表示是一个一维数组的指针,这个数组中每个元素又另一个一维数组的指针
	//b[0]是第一个一维数组的首地址(包括三个元素);b[1]是第二个一维数组的首地址。
	cout << b << endl;
	//&b表示是一个二维数组的指针,记录了一个2*3的二维数组的首地址
	cout << &b << endl;
	//所以b+1相当于b+3*sizeof(int)
	cout << b+1 << endl;
	//所以&b+1相当于&b+2*3*sizeof(int)
	cout << &b+1 << endl;

	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值