指针和数组的地址运算问题

指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。

假设 ptr 是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:

ptr++

在执行完上述的运算之后,ptr 将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 个字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果 ptr 指向一个地址为 1000 的字符,上面的运算会导致指针指向位置 1001,因为下一个字符位置是在 1001。

#define _CRT_SECURE_NO_WARNINGS
#include "iostream"

using namespace std;

int main()
{
	int height[10]; //int型的数组
	cout << "height       " << height << endl
		<< "height+1     " << height + 1 << endl
		<< "&height[0]   " << &height[0] << endl
		<< "&height+1    " << &height + 1 << endl
		<< "height+9     " << height + 9 << endl
		<< "height+10    " << height + 10 << endl;
	system("pause");
	return 0;
}

结果:

上面 &height[0] 就是取得是数组第一个元素的地址,假设地址为 1000;&height 是直接对数组名进行取地址,这个时候就是取得是 height 整个数组的地址,指向包含 10 个元素的 int 型数组,地址范围为 1000~1036;

我们知道 height 等价于 &height[0],height+1 会将地址加 4 个字节;但 &height+1 就是将地址增加 10*4 个字节。

发布了36 篇原创文章 · 获赞 6 · 访问量 2052

猜你喜欢

转载自blog.csdn.net/the_sea1/article/details/103505131