指针所指的地址值:
指针p作为if语句的条件时,实际检验的是指针本身的值,即指针所指的地址值。如果指针指向一个真实存在的变量,则其值必不为0(如代码中指针p1),此时条件为真;如果指针没有指向任何对象或者是无效指针(如代码中指针p2),则对p的使用将引发不可预计的结果。
指针所指对象的值:
解引用运算符*p 作为if语句的条件时,实际检验的是指针所指的对象内容,在代码中是指针p1所指的值i的内容即0,如果该int值为0,则条件为假;否则,如果该int值不为0,对应条件为真。
代码块:
#include<iostream>
using namespace std;
int main(){
int i = 0;
int *p1 = &i;
int *p2 = NULL;
if(p1){//检验指针P1所指地址的值
cout<<"p1 pass"<<endl;
}
if(p2){//检验指针p2所指地址的值
cout<<"p2 pass"<<endl;
}
if(*p1){//解引用 ,检验指针p1所指对象内容的值
cout<<"*p1 pass"<<endl;
}
return 0;
}
输出结果:
p1 pass //指针p1所指地址有真实值所以结果为真
p2 no pass //指针p2所指地址无真实值所以结果为假
*p1 no pass //解引用*p1所指对象内容值为0,所以结果为假
请按任意键继续. . .