首页 > 解决方案 > 输出数组成员的连续地址

问题描述

在此处输入图像描述

我画了这个是为了更好地理解。在 PC 的内存中有连续的内存区域,长度为 1 字节(绿色区域)。可以将它们分组以表示更大的数据(如int我们的示例中的)。

我想在这张图片中添加的是,绿色方块是连续的地址,比如0x000000后面跟着0x000001等。然后地址从arr四个跳起来,0x000000下一个是0x000004(因为int在这个护理中是4bytes)。

code_1

int arr[4] = {1,2,3,4};

int *p = arr;

cout << p << endl;
cout << ++p << endl;
cout << ++p << endl;
cout << ++p << endl;

输出_1

0x69fedc
0x69fee0
0x69fee4
0x69fee8

代码_2

char arrr[5] = {'1','2','3','4', '\n'};

char *ptr = arrr;

cout << &ptr << endl;
cout << &(++ptr) << endl;
cout << &(++ptr) << endl;
cout << &(++ptr) << endl;

输出_2

0x69fed0
0x69fed0
0x69fed0
0x69fed0

问题:我希望output_2地址是0x69fed0, 0x69fed1, 0x69fed2,0x69fed4

标签: c++arraysmemory-address

解决方案


这是因为您显示的是指针的地址,而不是存储在指针中的地址:

char *ptr = 0;
std::cout << &ptr;       // address where the pointer is placed
std::cout << (void*)ptr; // address managed by the pointer = 0

++ptr;

std::cout << &ptr;       // this value never changes
std::cout << (void*)ptr; // Now this value should be 1

推荐阅读