在带有 (void*) 强制转换的字符串中打印字符的内存地址
Print memory addresses of chars in a string with (void*) cast
我正在C++中尝试使用括号和指针语法,以巩固我对每种语法的理解。阅读其他 StackOverflow 问题,我知道为了打印带有std::cout
的内存地址,我必须使用(void *)
强制转换值。我还看到了使用std::addressof
的建议。我在这个问题中的语法完全是为了学习,并不代表我对最佳实践的概念。
对于字符串"Hello, World"作为argv[1]
,我能够使用以下方法打印每个字符的内存位置:
for (int i = 0; argv[1][i] != ' '; i++) {
std::cout << "Letter: " << argv[1][i] << " Address: " << (void*)&argv[1][i] << std::endl;
}
我希望使用此符号获得相同的结果:
for (char *c = argv[1]; *c != ' '; c++) {
std::cout << "Letter: " << *c << " Address: " << (void*)&c << std::endl;
}
但是,我得到以下输出:
Letter: H Address: 0x7ffee4e05788
Letter: e Address: 0x7ffee4e05788
Letter: l Address: 0x7ffee4e05788
Letter: l Address: 0x7ffee4e05788
Letter: o Address: 0x7ffee4e05788
Letter: , Address: 0x7ffee4e05788
Letter: Address: 0x7ffee4e05788
Letter: W Address: 0x7ffee4e05788
Letter: o Address: 0x7ffee4e05788
Letter: r Address: 0x7ffee4e05788
Letter: l Address: 0x7ffee4e05788
Letter: d Address: 0x7ffee4e05788
我的理解是...
- c 是指向字符的指针
- *c 是点的值
- &c 是指针保存的内存地址
- C++ 将 C 递增到下一个字符的内存地址
因此,我应该看到为每个字符打印一个唯一的内存地址。什么可以解释这个结果?
c
是一个变量,它保存指向字符的指针(地址(;其值随每次循环迭代而变化。&c
(这是您正在打印的内容(是该变量的地址;它保持不变。
相关文章:
- 有没有办法将字符串打印为文字?
- 如何通过标准字符串打印 ostream 变量的值?
- 这个随机字符串打印代码有什么问题?
- 比较 C++ 字符串打印中的两个整数数组
- 在C++中从后缀表达式字符串打印单个操作
- 没有得到 ASCII 编号 = 7 的字符串打印输出
- C++字符串到字符串打印不正确,无法获取 unicode 路径
- 如何从数组 c++ 中的字符串打印第 N 个字符
- 将 LPCWSTR 字符串打印到文件
- C++正在将DWORD_PTR*字符串打印到文件中
- 使用#define字符串打印f和警告
- 使用格式字符串打印类
- 如何将字符转换为字符串,并从字符串打印到main函数
- 将vector中结构体的成员字符串打印到cout流
- fprintf() / std::cout 不会将部分字符串打印到 stdout/stderr
- 为什么ostream为定义为' volatile char[] '的字符串打印' 1 ' ?
- c++文件读取和字符串打印
- 如何使用一个字符串打印此unicode行
- 按字符串打印日期
- 如何用c++将字符串打印到控制台