c++数组指针和指针数组

将地址转为4位16进制

string getHex(int x)
{
	char buff[10];
	sprintf_s(buff, "%X", (x & 0xFFFF));
	return (string)buff;
}

数组a的元素地址
F318,F31C,F320,F324
F328,F32C,F330,F334
F338,F33C,F340,F344

	int a[3][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12}
	};
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			if (j)
			{
				cout << ",";
			}
			int* p = &a[i][j];
			cout << getHex((int)p);
		}
		cout << endl;
	}

指针数组
int* q[3] = { &a[0][0],&a[1][0], &a[2][0] };
指针数组是一个数组,其中的每个元素都是一个指针
q 是一个数组,包含 3 个元素。
每个元素是一个指向 int 类型的指针(int* )

数组指针
int(*p)[4];
p = a; //p = &a[0];

数组指针是一个指针,指向一个数组的首地址
p 是一个指向包含 4 个整数的数组的指针
也就是说,p 可以指向一个 int[4] 类型的数组
p 的值实际上是 a[0] 的地址

1. 指针+i

指针数组

F3C8
F3D0
F3D8

q是一个数组,q[0]是int*类型
q+i是q[i]的地址,也就是&(&a[i][0])

for (int i = 0; i < 3; i++)
{
	string s = getHex((int)(q + i));
	cout << "第" << i << "个q元素的地址是" << s << endl;
}

数组指针

F318
F328
F338

p是一个指针,指向a[0]数组
p+i是a[i]的地址,也就是&a[i][0]

	for (int i = 0; i < 3; i++)
	{
		//p指向的是a[0]的地址
		string s = getHex((int)(p + i));
		//输出的是p的值,也就是a[0]的地址
		cout << "第" << i << "个[4]数组的地址是" << s << endl;
	}

2.*(指针+i)

指针数组

F318
F328
F338

q是一个数组,q+i对应的是q[i]的地址
*(q+i)是*q[i],即&a[i]

	for (int i = 0; i < 3; i++)
	{
		string s = getHex((int)*(q + i));
		cout << "a数组的第" << i << "行第0个元素的地址是" << s << endl;
	}

数组指针

F318
F328
F338

p是一个指针,指向a[0]数组
p+i是a[i]的地址,也就是&a[i][0]
*(p+i)是*a[i],输出&a[i][0]

	for (int i = 0; i < 3; i++)
	{
		string s = getHex((int)*(p + i));
		cout << "a数组的第" << i << "行第0个元素的地址是" << s << endl;
	}

3、*(指针+i)+j

指针数组

F31C
F32C
F33C

q是一个数组,q+i是q[i]的地址
*(q+i)是*q[i],即&a[i]
*(q + i)+j)是*(q[i]+j),即&a[i][j]

	for (int i = 0; i < 3; i++)
	{
		string s = getHex((int)(*(q + i)+1));	
		cout << "a数组的第" << i << "行第0个元素的地址是" << s << endl;
	}

数组指针

F31C
F32C
F33C

p是一个指针,指向a[0]数组
p+i是a[i]的地址,也就是&a[i][0]
*(p+i)是*a[i],输出&a[i][0]
*(p+i)+j是*(q[i]+j),即&a[i][j]

	for (int i = 0; i < 3; i++)
	{
		string s = getHex((int)(*(p + i)+1));
		cout << "a数组的第" << i << "行第0个元素的地址是" << s << endl;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱与意志

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值