北京申德勒加油站:C语言中的空指针是什么意思?

来源:百度文库 编辑:高考问答 时间:2024/05/09 09:09:12
请举例说明,空指针。空指针还能指别的空间么?

这样一看才知道大家对空指针的概念如此浑浊哦!!
首先:
void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来.

还有'\0',这也不是空指针所指的内容. '\0'是表示一个字符串的结尾而已,并不是NULL的意思.

真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:
char* k;
这里这个k就叫空指针.我们并未让它指向任意地点.
又或者
char* k = NULL;
这里这个k也叫空指针,因为它指向NULL 也就是0,注意是整数0,不是'\0'
一个空指针我们也无法对它进行取内容操作.
空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容.也就是说要这样
k = "hello world!";
这时k就不是空指针了.

上面的错了。其实空指针就是指值为NULL的指针。而且NULL在C和C++的定义方式也不一样,甚至不同的编译器也有不同的要求。
例如:
define NULL 0 //C的定义方式
define NULL (void *)0 //C++的定义方式

如果函数的参数可以是任意类型指针,那么应声明其参数为void *
典型的如内存操作函数memcpy和memset的函数原型分别为:
void * memcpy(void *dest, const void *src, size_t len);
void * memset ( void * buffer, int c, size_t num );
这样,任何类型的指针都可以传入memcpy和memset中,这也真实地体现了内存操作函数的意义,因为它操作的对象仅仅是一片内存,而不论这片内存是什么类型。空指针仅仅是申明了一个变量名,告诉编译器有个变量存在,当然你后面肯定会用到它(事实上你不用也没人怪你)。
注意C++中语法要求更严格,不允许直接对空指针赋值,而必须先进行类型转换。

指针没有指向任何东西

指针没有指向任何东西
空指针指的就的'\0'!