指向空数组的指针

Ale*_*lex 9 c arrays pointers

我有一个指向数组开头的指针,但我需要检查它是否未分配.我想到取消引用指针并检查是否为NULL,但这会导致类型错误.谁能看到我做错了什么?

int mydispose(int *array){
    int i = 0;

    if(*array == NULL){
            return 1;
    }

    return ;
Run Code Online (Sandbox Code Playgroud)

}

编辑:对不起,如果我不清楚:我有一个指向数组开头的指针,但我想检查数组是否为空.

Bla*_*iev 11

*array == NULL是错的.您首先取消引用指针(如果指针确实为null,则可能导致段错误),然后将其int值与指针值进行比较.而且,如果NULL定义为just 0和not ,那么你的编译器将完全接受错误的表达式(void *) 0.

您应该检查array == NULL传递的指针是否引用任何内容,然后仅在不是的情况下取消引用它NULL.

但请注意,取消引用非空指针也不能保证是安全的操作.如果指针包含垃圾值,因为它是在堆栈上分配而未初始化,或者如果它指的是内存的释放区域,则会发生令人讨厌的错误.

  • 在C中没有空数组这样的东西 - 当将数组传递给函数时,你应该总是传递一个表示长度的数字.如果该数字为零,则可以将该数组视为空.但是,有一个空字符串的概念,因为按照惯例,字符串在末尾用零字符分隔.如果第一个字符是零字符,则认为是空字符串. (2认同)

Jer*_*fin 5

你想if (array == NULL)-但除非你先初始化arrayNULL,它不会做任何不太妙.我认为你最好还是备份并告诉我们更多关于你想要完成的事情,并试图获得帮助以实现你的总体目标.