条件内的指针语法

时间:2019-04-17 12:26:20

标签: c++ pointers if-statement

初始化指针后,是否必须使用*取消引用运算符在条件中调用指针?

示例:

int main()
{
    int var = 10;
    int *ptr = &var;

    if(ptr)    // does this need to be if(*ptr)  ???
    {.......}
}

我能简短解释为什么吗?

谢谢。

3 个答案:

答案 0 :(得分:5)

if (ptr)

检查指针是否不是Null

if (*ptr)

检查其指向的值是否不为零(在此示例中为10)

因此,要检查该值,您应该添加*。

答案 1 :(得分:0)

这取决于您要做什么。

if(ptr)检查指针值是否为nullptr。请注意,这是if(ptr != nullptr)的简写。

if(*ptr)检查指针指向的指针是否为nullptr(或0)-在这种情况下,由于取消引用(跟随)指针来回答问题,那么在这种情况下,指针本身最好 not 不为nullptr

答案 2 :(得分:0)

首先,指针只是一个变量。但是,您可以在不同的上下文中使用它。

与其他任何变量一样,您可以按如下方式访问指针内容(这是基础内存的地址):

int i = 1;
int * p = &i;
std::cout << p << std::endl

这将输出i的地址,因为这是存储在p中的内容

但是,如果您要访问基础内存的内容(i的值),则需要首先使用*运算符来取消引用指针:

std::cout << *p << std::endl;

这会打印i的值,所以1

当然,您也可以访问指针的地址(因为i的地址也是一个数字值,也需要存储在某个位置):

std::cout << &p << std::endl;

这将输出p的地址,因此存储i的地址的地址:) 作为一个小示例,请尝试运行以下代码:

#include <iostream>


int main() {
    int i = 1;
    int * p = &i;
    std::cout << "Value of i(i): " << i << std::endl
              << "Adress of i(&i): " << &i << std::endl
              << "Value of p(p): " << p << std::endl
              << "Dereferenced p(*p): " << *p << std::endl
              << "Adress of p(&p): " << &p << std::endl
              << "Dereferenced adress of p(*(&p)): " << *(&p) << std::endl;
}