什么时候在C++中使用指针的反引用运算符
什么时候在C++中使用指针的反引用运算符
这个问题已经有了答案:
我目前正在学习C++,不是在学校学习,而是使用书籍、教程和练习。
有一件事情让我困惑,我一直没有找到答案,那就是在指针中什么时候要使用解引用运算符(*)。例如,来自我目前阅读的C++ primer书籍:
char *cp = get_string(); if (cp) /* ... */ // true if the pointer cp is not zero while (*cp) /* ... */ // true if *cp is not the null character
我不明白为什么if语句中只是cp而没有解引用运算符,而在while语句中则使用了解引用运算符。书中还有其他的例子,比如在for循环中使用混合方式,但这是我目前阅读的书中最令我困惑的例子。提前感谢您的帮助。
总结:什么时候只需使用指针的变量名而不需要解引用,什么时候才需要使用它来解引用。如何区分。
admin 更改状态以发布 2023年5月22日
这种差异很简单,但需要练习才能习惯。本质上,当你想处理指针实际指向的内容(即指针末尾实际上的东西)时,就需要使用解引用运算符。
例如,如果我有一个char *cp = get_string();
,那么cp是指向字符数组中第一个字符的指针。
检查if(cp)
这样的语句检查的是指针是否为0(即指针指向NULL)。在这种情况下,这可能是有用的,因为get_string()
如果成功,则返回指向字符串的指针,否则返回NULL
。
相反,使用类似while(*cp)
这样的语句,意思是:只要cp
当前指向的字符不是0(null字符\0),就继续循环。在这种情况下,你的while循环可能看起来像这样:
while(*cp) { // process letter currently pointed to by cp cp++; // advance cp to point to the next character. }
这是遍历字符数组的常见习惯用法。