什么时候在C++中使用指针的反引用运算符

11 浏览
0 Comments

什么时候在C++中使用指针的反引用运算符

这个问题已经有了答案

在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日
0
0 Comments

这种差异很简单,但需要练习才能习惯。本质上,当你想处理指针实际指向的内容(即指针末尾实际上的东西)时,就需要使用解引用运算符。

例如,如果我有一个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.
}

这是遍历字符数组的常见习惯用法。

0
0 Comments

指针是一个变量,它的值是另一个变量或对象的地址。我们说指针“指向”那个对象。\n当编写表达式时,cp表示指针变量。*cp表示指针变量所持有地址的变量或对象。\n试着保持清晰的思维,区分“指针”和“被指向的东西”之间的区别。它们是两个不同的事物,每个都有自己的生命周期和存储要求。\n所以,针对你问题中的代码,if(cp)测试指针。它的缩写是if(cp != nullptr),也就是说这个指针是否被设置指向某个地方呢?(换句话说,这个指针目前是否持有另一个对象的地址?)\nif(*cp)意味着if(*cp != 0),它询问存储在指针中地址的对象的值(换句话说,被指向对象的值)。

0