C语言常见问题解析:空指针与类型定义

5星 · 超过95%的资源 需积分: 10 17 下载量 167 浏览量 更新于2024-07-25 1 收藏 1.35MB PDF 举报
"《必须弄懂的495个C语言问题》是关于C语言编程的一本问答集,由Steve Summit原著,朱群英和孙云翻译。这本书涵盖了C语言的基础到高级问题,包括声明与初始化、结构、联合和枚举等多个方面。书中通过具体的例子和常见问题解答,帮助读者深入理解C语言的关键概念和技术。" 在C语言中,空指针是一个重要的概念。它通常被用来表示一个没有指向任何特定对象的指针。在描述中提到的几个问题主要围绕空指针展开: 1. 空指针是程序中表示未定义或无效的指针值,它在多数情况下等同于整数0。在C语言中,你可以通过`NULL`来表示空指针,这是一个预定义的宏,其值依赖于编译器和平台,但通常也是0。 2. 获得空指针最简单的方式就是直接将其初始化为`NULL`,例如`int *p = NULL;`。这样可以确保指针在使用前处于已知的空状态。 3. 使用`if (p)`来检查指针是否为空是可靠的,因为`NULL`在大多数情况下会被转化为0,这与布尔逻辑中的假(false)相匹配。如果空指针的内部表示不是0,这通常是因为特定平台的实现细节,但标准规定了`if (p)`应该能够正确判断。 4. `NULL`是一个预定义的宏,它的定义通常是`(void*)0`或者`(NULL)`,用于提供一个空指针常量。在使用非全零值作为空指针内部表示的机器上,`NULL`可能会被定义为适合该平台的任何非有效指针值。 5. 在某些平台上,`NULL`可能被定义为非0值,如`(int*)-1`,这是因为这些系统中空指针的表示与0不同。但是,无论具体定义为何,`NULL`的目的是作为一个空指针的标识,所以`if (p == NULL)`这样的比较依然有效。 除了空指针之外,书中还涉及了其他C语言的基础概念: - 声明和初始化:讨论了如何选择适当的整数类型,64位类型的处理,全局变量和函数的最佳实践,以及`extern`关键字在函数声明中的作用。 - 关键字`auto`:在C语言中,`auto`关键字通常用于局部变量,表明它们在每次进入函数时自动分配和初始化,离开函数时自动释放。 - 链表的定义:解释了如何正确地定义和使用链表,以及typedef在创建自定义指针类型中的应用。 - 复杂声明的理解:如何解析复杂的声明,如函数指针数组等。 - main()函数的定义:`void main()`在C99标准之后是不推荐的,标准的定义是`int main(void)`或`int main(int argc, char *argv[])`。 - 变量初始化:未初始化的变量值是不确定的,全局变量默认值并不总是0,不应依赖这种行为。局部变量则不进行初始化。 - 字符串与动态内存:初始化字符串常量的限制,以及如何正确使用`malloc`分配内存给指针。 - 指针与数组:指针和字符串字面量之间的差异,以及对指针进行赋值操作时需要注意的问题。 - 函数指针:如何声明和初始化函数指针,以及相关的语法。 这本书通过这些问题解答,旨在帮助读者深入理解C语言中的核心概念,避免常见的陷阱,并提供有效的编程实践。