条件中的指针语法
Pointer Syntax Within Condition
初始化
指针后,是否必须在条件中使用 * 取消引用运算符来调用指针?
例:
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;
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- QMetaObject invokeMethod的基于函数指针的语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++语法差异:二维和一维数组(指针算术)
- C++中未命名函数指针的语法
- c++ 获取非语法使用"&"创建指针
- C++语法中的函数指针
- 存储函数指针的正确语法
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 非标准语法,使用 & 创建指向成员的指针
- 将引用绑定到指针的语法是什么?(各种)
- 如何使用二维语法访问指针
- 带有自定义类的共享指针语法背后的任何原因,如下所示
- 非标准语法使用 '&' 创建指向成员 C++ 的指针
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- C++指向函数声明语法的指针
- 难以理解指针语法C++
- 数组的语法指针C++