我试图确定检查的指针是大于0的目的:检查指针是否大于0?
void someFunction(int *src) {
int val = *src++;
if(val > 0) {
// Do something?
}
}
如果数据类型为指针,不会指针始终的值是一个内存地址?做指针算术是否可以设置val = 0?
这是一个简单的空指针检查?
我试图确定检查的指针是大于0的目的:检查指针是否大于0?
void someFunction(int *src) {
int val = *src++;
if(val > 0) {
// Do something?
}
}
如果数据类型为指针,不会指针始终的值是一个内存地址?做指针算术是否可以设置val = 0?
这是一个简单的空指针检查?
这不检查指针是否大于零;它将检查指向的值是否大于零,并同时将指针前进一个。下面是一些等价代码,可以帮助你理解:
void someFunction(int *src) {
int val = *src; // Dereferencing the pointer
src++; // Moving the pointer
if(val > 0) {
// Do something?
}
}
val
只是一个int
,而不是一个指针。
val
不是一个指针;它是一个int
,它的值是通过取消引用src
获得的。
这不检查指针,它检查一个整数。 *
运算符取消引用指针,产生指针当前指向的值。例如,如果src
指向0
,则val
将为0
,并且该if
语句的条件将为false。
您不检查指针是否大于0,您正在检查指向的位置中保存的值是否大于0. src
本身就是一个地址,*src
是该地址的值。
就拿那个传给你的麻烦就行了仔细看看:
int val = *src++;
你应该认识到,由于工作后缀递增运算符,这样我们就可以一分为二该行:
int val = *src;
++src;
在这一点上,val
有一个值src
的副本指向在函数的开始;同时src
本身现在指向下一个内存位置。
此处没有任何内容检查指针src
是否为空,其无效(或其他方式)与val
中存储的值无关。