car*_*995 1 c++ struct pointers pointer-address
我今天观察到一些奇怪的行为,代码如下:
#include <iostream>
struct text
{
char c;
};
int main(void)
{
text experim = {'b'};
char * Cptr = &(experim.c);
std::cout << "The Value \t: " << *Cptr << std::endl ;
std::cout << "The Address \t: " << Cptr << std::endl ; //Print weird stuff
std::cout << "\n\n";
*Cptr = 'z'; //Attempt to change the value
std::cout << "The New Value \t: " << *Cptr <<std::endl ;
std::cout << "The Address \t: " << Cptr << std::endl ; //Weird address again
return 0;
}
Run Code Online (Sandbox Code Playgroud)
cout theAddress上面的代码会出现一些奇怪的值?
2.)为什么我仍然可以c通过解除具有奇怪地址的指针来改变成员的值?
谢谢.
我认为"怪异"的东西出现了,因为cout认为它是一个cstring,即一个0终止的字符数组,因此它不会按预期打印地址.而且由于你的"字符串"不是0终止的,它所能做的就是走内存直到它遇到一个0.总结一下,你实际上并没有打印地址.
为什么我仍然可以通过解除具有奇怪地址的指针来改变成员c的值
如上所述,地址并不奇怪.在您的代码中Cptr指向有效的内存位置,您可以使用它完成任何您想要的任何操作.
考虑修改代码如下:
std::cout << "The Address \t: " << (void *)Cptr << std::endl ;
Run Code Online (Sandbox Code Playgroud)
有一个std::ostream& operator<< (std::ostream& out, const char* s );需要一个,char*所以你必须转换void*为打印一个地址,而不是它"指向" 的字符串