检查指针是否大于0?

时间:2012-03-07 00:13:03

标签: c pointers

我试图确定检查指针是否大于0的目的:

void someFunction(int *src) {
   int val = *src++;
   if( val > 0 ) {
       // Do something?
   }
}

如果数据类型是指针,那么指针的值是否总是一个内存地址?做指针算法是否可以设置val = 0?

这是一个简单的空指针检查吗?

5 个答案:

答案 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中存储的值无关。