关于指针指针和检查它们是否为NULL的问题

时间:2011-04-24 21:45:05

标签: c

我有一个指针数组。我将它们分配给所有为NULL。我更改了一些指针,使其中一些指向一个NULL的元素,其中一些指向一个元素。我正在遍历数组中的所有指针。我的问题是,如何检查实际指针是否为NULL而不是它们指向的元素是NULL?

我希望能够区分NULL指针和指向NULL的指针。这是一个迭代:

if (ptrptr == NULL) {
    // The actual pointer is NULL, so set it to point to a ptr
    ptrptr = ptr;
} else {
    // The pointer points to SOMETHING, it may be NULL, it may not be, but the ptrptr itself is not NULL
    // Do something
}

我将ptrptr设置为指向ptr,并且因为ptr为NULL,所以即使它指向某个东西,我也会为ptrptr获取NULL。

2 个答案:

答案 0 :(得分:1)

您需要分配内存来保存指针,并取消引用它。

if (ptrptr == NULL) {
    // The actual pointer is NULL, so set it to point to a ptr
    ptrptr = malloc(sizeof(ptr));
    *ptrptr = ptr;
} else {
    // The pointer points to SOMETHING, it may be NULL, it may not be, but the ptrptr itself is not NULL
    // Do something
}

答案 1 :(得分:0)

例如,假设您的对象最终是int。因此ptr的类型为int *,而ptrptr的类型为int**。这意味着赋值ptrptr = ptr是错误的,您的编译器应该已经注意到并给了您一个警告。

例如:

#define N 100

int* my_arr[N]; //My array of pointers;
//initialize this array somewhere...

int **ptrptr;
for(ptrptr = my_arr; ptrptr < my_arr + N; ptrptr++){
    ptr = get_object();
    *ptrptr = ptr; //This is equivalent to my_array[i] = ptr
}