相关疑难解决方法(0)

C中的NULL总是为零吗?

昨天我正在面试一个中级软件工程职位的人,他提到在C中,NULL并不总是零,并且他已经看到了C的实现,其中NULL不为零.我觉得这很可疑,但我想确定.谁知道他是对的?

(回复不会影响我对这位候选人的判断,我已将决定提交给我的经理.)

c null pointers zero

56
推荐指数
4
解决办法
3万
查看次数

应该使用`!var`还是`var == NULL`?

在测试时NULL,我看到了很多使用的代码!var.有没有理由使用这种测试而不是更明确的测试var == NULL.if (var)对于非空项目,同样也是一个正确的测试?

c pointers

7
推荐指数
1
解决办法
624
查看次数

Xcode 6.3中的Open Settings警告问题:'UIApplicationOpenSettingsURLString'的地址比较不等于空指针始终为true

我不是在发明轮子.在iOS8中,要从应用程序内部打开"设置",我正在使用此代码:

BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);

if (canOpenSettings)
{
    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:url];
}
Run Code Online (Sandbox Code Playgroud)

代码在stackoverflow中有很多答案和问题.

问题出现在Xcode 6.3上,我有一个警告说:

Comparison of address of 'UIApplicationOpenSettingsURLString' not equal to a null pointer is always true

有趣的是Apple在他们的示例代码中使用它:https:
//developer.apple.com/library/ios/samplecode/AppPrefs/Listings/RootViewController_m.html

关于如何避免警告并仍然检查我是否可以打开设置的一些想法?

objective-c uiapplication ios xcode6.3

7
推荐指数
1
解决办法
2694
查看次数

将指针数组设置为NULL的标准方法是什么?

请考虑这样的堆分配的指针数组:

Thing** array = malloc(sizeof(Thing*) * array_length);
Run Code Online (Sandbox Code Playgroud)

如何设置其所有成员为NULL

我当然可以这样做:

for (int i = 0; i < array_length; i++) {
    array[i] = NULL;
}
Run Code Online (Sandbox Code Playgroud)

但是我想知道是否有一个标准功能。

SO主要提到memset,但是我不确定在此用例下是否可以保证在所有平台上都可以使用,因为据我所知,它是逐字节而不是逐元素地遍历数组。

同样更普遍的是,将任何类型的数组(T可以是任意大小)中的所有值设置为某个特定值的标准方法是什么?

c arrays

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

在C中,条件是:"if(a!= NULL)"与条件"if(a)"相同吗?

假设a是一个指针,在为它分配内存之后,我想检查内存是否已成功分配,我已经看到了两种方法:

if(a != NULL)

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

第一个和第二个陈述有什么区别?

c if-statement nul

6
推荐指数
1
解决办法
360
查看次数

编译器允许'char*k = false'?为什么?

我从编译器行为的角度发现了奇怪,它允许赋值布尔值* char.

char * k= false;
Run Code Online (Sandbox Code Playgroud)

为什么?但是在赋值后,char仍未初始化.为什么编译器不允许赋值int

c++

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

在C和C++中为NULL/false,大于0x0/0b0 /'\ 0'/ 0

正如问题所述,我一直在使用NULL和false(在C++中)与0或0x0交替使用,依此类推.我很想知道除了是0的同义词之外他们是否有任何特殊意义.

c c++ null

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

指针地址跨越各种平台

在C中编码时的常见情况是编写返回指针的函数.如果在运行期间写入函数内发生某些错误,NULL可能会返回以指示错误.NULL只是特殊的内存地址0x0,除了表示特殊条件的出现之外,它从不用于任何东西.

我的问题是,是否有任何其他特殊的内存地址永远不会用于用户态应用程序数据?

我想知道这个的原因是因为它可以有效地用于错误处理.考虑一下:

#include <stdlib.h>
#include <stdio.h>

#define ERROR_NULL 0x0
#define ERROR_ZERO 0x1

int *example(int *a) {
    if (*a < 0)
        return ERROR_NULL;
    if (*a == 0)
        return (void *) ERROR_ZERO;
    return a;
}

int main(int argc, char **argv) {
    if (argc != 2) return -1;
    int *result;
    int a = atoi(argv[1]);
    switch ((int) (result = example(&a))) {
        case ERROR_NULL:
            printf("Below zero!\n");
            break;

        case ERROR_ZERO:
            printf("Is zero!\n");
            break;

        default:
            printf("Is %d!\n", *result);
            break;
    }
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c error-handling pointers void-pointers memory-address

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