我试图确定检查指针是否大于0的目的:
void someFunction(int *src) {
int val = *src++;
if( val > 0 ) {
// Do something?
}
}
如果数据类型是指针,那么指针的值是否总是一个内存地址?做指针算法是否可以设置val = 0?
这是一个简单的空指针检查吗?
答案 0 :(得分:4)
val
不是指针;它是int
,其值是通过解除引用src
获得的。
答案 1 :(得分:4)
你没有检查指针是否是> 0,您正在检查指向的位置中保存的值是否大于0. src
单独是一个地址,*src
是该地址保存的值。
答案 2 :(得分:4)
那不是检查指针是否大于零;它检查指向的值是否大于零,同时将指针推进1。以下是一些可能有助于您理解的等效代码:
void someFunction(int *src) {
int val = *src; // Dereferencing the pointer
src++; // Moving the pointer
if( val > 0 ) {
// Do something?
}
}
val
只是int
,而不是指针。
答案 3 :(得分:3)
那不是检查指针,而是检查整数。 *
运算符取消引用指针,产生指针当前指向的值。例如,如果src
指向0
,则val
将为0
,并且该if
语句的条件将为false。
答案 4 :(得分:0)
仔细看看给你带来麻烦的那条线:
int val = *src++;
你应该认识到,作为后缀增量运算符,我们可以将该行分成两行:
int val = *src;
++src;
此时,val
在功能启动时有一个值src
指向的副本;同时src
本身现在指向下一个内存位置。
此处没有任何内容可以检查指针src
是否为空,其空值(或其他方式)与val
中存储的值无关。