我正在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
(这是您正在打印的内容(是该变量的地址;它保持不变。