我是C ++的新手,正在尝试学习指针的概念。当我尝试打印pStart的值时,我期望其值为十六进制的text [0]的地址(例如,类似0x7fff509c5a88的地址)。但是,打印出的实际值为abcdef。

有人可以向我解释为什么会这样吗?我缺少什么部分?

char text[] = "abcdef";
char *pStart = &text[0];
cout << "value of pStart: " << pStart << endl;

最佳答案

Iostream提供了一个重载,它假定指向char的指针指向以NUL终止(C样式)的字符串,并打印出它指向的字符串。

为了使地址本身可以打印出来,请将其强制转换为void指针:

cout << "value of pStsart: " << (void *)pStart << "\n";


请注意,尽管您实际上根本不需要pStart。数组的名称(通常包括这种情况)的值等于数组开头的地址,因此您可以直接打印它:

cout << "address of text: " << (void *)text << "\n";


也要摆脱使用endl的习惯。它完成了您几乎肯定不会意识到并且几乎从未想要的事情。

07-25 20:29