2012-03-07 145 views
0

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

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

如果数据类型为指针,不会指针始终的值是一个内存地址?做指针算术是否可以设置val = 0?

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

回答

4

这不检查指针是否大于零;它将检查指向的值是否大于零,并同时将指针前进一个。下面是一些等价代码,可以帮助你理解:

void someFunction(int *src) { 
    int val = *src; // Dereferencing the pointer 
    src++;   // Moving the pointer 

    if(val > 0) { 
     // Do something? 
    } 
} 

val只是一个int,而不是一个指针。

4

val不是一个指针;它是一个int,它的值是通过取消引用src获得的。

3

这不检查指针,它检查一个整数。 *运算符取消引用指针,产生指针当前指向的值。例如,如果src指向0,则val将为0,并且该if语句的条件将为false。

4

您不检查指针是否大于0,您正在检查指向的位置中保存的值是否大于0. src本身就是一个地址,*src是该地址的值。

0

就拿那个传给你的麻烦就行了仔细看看:

int val = *src++; 

你应该认识到,由于工作后缀递增运算符,这样我们就可以一分为二该行:

int val = *src; 
++src; 

在这一点上,val有一个值src的副本指向在函数的开始;同时src本身现在指向下一个内存位置。

此处没有任何内容检查指针src是否为空,其无效(或其他方式)与val中存储的值无关。