c++ - 输出数组成员的连续地址
问题描述
我画了这个是为了更好地理解。在 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
解决方案
这是因为您显示的是指针的地址,而不是存储在指针中的地址:
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
推荐阅读
- homekit - 通过 HomeKit 控制 Ecobee 恒温器
- django - Django 1.11 的 signed_cookie 会话后端为每个请求设置一个新的 sessionid
- jmeter - 如何记录“服务器执行时间”=(延迟 - 连接时间)
- python - 该术语未被识别为 cmdlet、函数、脚本文件或可运行程序的名称。检查名称的拼写,或者如果路径 [...]
- typescript - 列表对象数组在nestjs中添加一个数组打字稿
- pine-script - 关于自动化多空订单的问题
- python - Python - 根据输入返回字典键
- python - 如何从 Telegram 中的聊天中获取其他用户的 ID?
- spring-boot - 问:Vaadin 14:如果没有 application.properties,则不会从 application.yaml 获取服务器端口
- karate - 通过空手道中的功能文件加载预编译文件