相关疑难解决方法(0)

我们如何检查指针是否为NULL指针?

我一直认为只会if(p != NULL){..}做这项工作.但在阅读Stack Overflow问题后,似乎没有.

那么在吸收了那个说明NULL指针可能具有非零值的问题的所有讨论之后检查NULL指针的规范方法是什么?

c null-pointer

42
推荐指数
5
解决办法
13万
查看次数

用于在C中使用指针的循环

我不明白指针在for循环中的作用.什么是*p在下面的循环呢?

char str[128] = "Some Text";
char *p;

for (p = str; *p /*what does this mean?*/; p++)
{
    // Code
}
Run Code Online (Sandbox Code Playgroud)

我确实了解其余的,但为什么不*p喜欢p > 3或类似的东西?
为什么一个人?
为什么这样写?

c arrays string pointers for-loop

40
推荐指数
7
解决办法
2万
查看次数

"if"条件下的变量赋值

我最近失去了一些时间来弄清楚我的代码中的错误是由一个错字引起的:

if(a=b)
Run Code Online (Sandbox Code Playgroud)

代替:

if(a==b)
Run Code Online (Sandbox Code Playgroud)

我想知道是否有任何特殊情况你想要在if语句中为变量赋值,或者如果没有,为什么编译器不会发出警告或错误?

c++ if-statement

29
推荐指数
7
解决办法
6万
查看次数

c ++中if(指针)与if(指针!= NULL)之间的区别,cpplint问题

我已经检查了这篇文章我可以使用if(指针)而不是if(指针!= NULL)吗?网上还有其他一些帖子.

但它没有说两个陈述之间有任何区别.

问题:当我在cpp代码上运行cpplint.py时,我发现了检查指针为NULL的问题.我更喜欢用简单的方法来检查

if(pointer)         //statement1
Run Code Online (Sandbox Code Playgroud)

但是cpplint说你应该检查一下

if(pointer != NULL)        //statement2
Run Code Online (Sandbox Code Playgroud)

所以我只想知道,statement2statement1有什么好处吗?是否存在一些语句可能会产生问题?

工作:据我所知,这两个陈述的工作没有区别.它只是改变了编码风格.

我更喜欢使用like statement1,因为

  • 它简单易读
  • 没有张力=错误(==)在比较中错误地超过了()

但是cpplint正在提出这个问题,那么我可能会有一些好处.

注意: Java也不支持statement1.

c++ pointers coding-style cpplint

9
推荐指数
1
解决办法
376
查看次数

如何检查void指针是否指向NULL?

所以,如果你这样做:

void *ptr = NULL;
Run Code Online (Sandbox Code Playgroud)

检查该void指针是否为NULL的最佳方法是什么?

我现在的解决方法是:

if (*(void**)ptr == NULL) ... 
Run Code Online (Sandbox Code Playgroud)

但这似乎不是最好的方法,因为我隐含地假设ptr是void**类型(它不是).

c pointers void-pointers

7
推荐指数
2
解决办法
6万
查看次数

检查指针的可空性:!指针或指针== nullptr?

假设我有一个指针:int *pointer.

如果我想测试它的可空性,我应该这样做:

bool nullability = !pointer;
Run Code Online (Sandbox Code Playgroud)

或者:

bool nullability = (pointer == nullptr);
Run Code Online (Sandbox Code Playgroud)

两个表达都是等价的吗 如果没有,为什么以及副作用是什么?

c++ pointers

4
推荐指数
1
解决办法
1886
查看次数

while(foo)vs while(foo!= NULL)

有人可以解释while(foo)vs while(foo != NULL)是如何相同的?也:

while(!foo) VS while(foo == NULL)

我知道 !不是,但这就是我所知道的.

c while-loop

3
推荐指数
1
解决办法
8331
查看次数

检查真值环境中的空指针

让我们说我有一个指针

MyType *ptr;
Run Code Online (Sandbox Code Playgroud)

当用旧标准在"真值 - 值上下文"中检查该指针的有效性时,我会写这样的东西

if (ptr)    { ... // 1
while (ptr) { ... // 2
Run Code Online (Sandbox Code Playgroud)

问题在于,在这样的"真值上下文"中,我们期望将指针隐式转换为布尔值,因此我们将进行比较

if (NULL != ptr)    { ...
while (NULL != ptr) { ...
Run Code Online (Sandbox Code Playgroud)

然而,0弃用了与整数的宏进行比较,C++ 11建议进行比较nullptr.

在真值期间的情况下,如上面的(1)或(2),我们没有明确说

if (nullptr != ptr) { ...
while (nullptr != ptr) { ... 
Run Code Online (Sandbox Code Playgroud)

什么是我们的指针比较?它转换为布尔值?我们必须明确地比较nullptr吗?

c++ pointers c++11

2
推荐指数
1
解决办法
601
查看次数

最佳实践:如何在C/C++中检查NULL返回值

这是C和C++的样式问题.你比较喜欢哪个

void f() {
  const char * x = g();
  if (x == NULL) {
    //process error
  }
  // continue function
}
Run Code Online (Sandbox Code Playgroud)

或这个:

void f() {
  const char * x = g();
  if (! x) {
    //process error
  }
  // continue function
}
Run Code Online (Sandbox Code Playgroud)

?前者更清晰,但后者则不那么冗长.

c c++ null

0
推荐指数
1
解决办法
5322
查看次数