使用(void*)强制转换以字符串形式打印字符的内存地址 我正在用C++中的括号和指针语法来巩固我对每一个的理解。在阅读其他StackOverflow问题时,我意识到为了使用std::cout打印内存地址,我必须使用(void*)强制转换该值。我还看到了使用std::addressof的建议。我在这个问题上的语法完全是为了学习,而不是代表我对最佳实践的概念
对于字符串“Hello,World”,如使用(void*)强制转换以字符串形式打印字符的内存地址 我正在用C++中的括号和指针语法来巩固我对每一个的理解。在阅读其他StackOverflow问题时,我意识到为了使用std::cout打印内存地址,我必须使用(void*)强制转换该值。我还看到了使用std::addressof的建议。我在这个问题上的语法完全是为了学习,而不是代表我对最佳实践的概念,c++,pointers,memory,C++,Pointers,Memory,对于字符串“Hello,World”,如argv[1],我可以使用以下命令打印每个字符的内存位置: for (int i = 0; argv[1][i] != '\0'; i++) { std::cout << "Letter: " << argv[1][i] << " Address: " << (void*)&argv[1][i] << std::endl; } 我的理解是 c是指向字符的指针 *c是指针
argv[1]
,我可以使用以下命令打印每个字符的内存位置:
for (int i = 0; argv[1][i] != '\0'; i++) {
std::cout << "Letter: " << argv[1][i] << " Address: " << (void*)&argv[1][i] << std::endl;
}
我的理解是
- c是指向字符的指针
- *c是指针对象的值
- &c是指针持有的内存地址
- c++将c递增到下一个字符的内存地址
因此,我应该看到为每个字符打印一个唯一的内存地址。什么可以解释这个结果?
c
是一个变量,它包含指向字符的指针(地址);它的值随每次循环迭代而变化&c
(您正在打印的内容)是该变量的地址;它保持不变。c
是一个变量,用于保存指向字符的指针(地址);它的值随每次循环迭代而变化&c
(您正在打印的内容)是该变量的地址;它保持不变。Aha,所以我应该使用(void*)和(*c)省略符号andaha,所以我应该使用(void*)和(*c)省略符号andaha
for (char *c = argv[1]; *c != '\0'; 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