条件中的指针语法

Pointer Syntax Within Condition

本文关键字:语法 指针 条件      更新时间:2023-10-16
初始化

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

例:

int main()
{
    int var = 10;
    int *ptr = &var;
    if(ptr)    // does this need to be if(*ptr)  ???
    {.......}
}

我能简短地解释一下为什么吗?

谢谢。

if (ptr)

检查指针是否未Null

if (*ptr)

检查它指向的值是否不为零(在本例中为 10(

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

这取决于你想做什么。

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

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

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

与任何其他变量一样,您可以访问指针内容(这是底层内存的地址(,如下所示:

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;
}