野外生存类的好评电影:C语言中的空指针是什么意思?

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

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

真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:
char* k;
这里这个k就叫空指针.我们并未让它指向任意地点.
又或者
char* k = NULL;
这里这个k也叫空指针,因为它指向NULL 也就是0,注意是整数0,不是‘\0‘
一个空指针我们也无法对它进行取内容操作.
空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容.也就是说要这样
k = "hello world!";
这时k就不是空指针了.   指针没有指向任何东西  如果函数的参数可以是任意类型指针,那么应声明其参数为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++中语法要求更严格,不允许直接对空指针赋值,而必须先进行类型转换。   
其实空指针就是指值为NULL的指针。而且NULL在C和C++的定义方式也不一样,甚至不同的编译器也有不同的要求。
例如:
define NULL 0 //C的定义方式
define NULL (void *)0 //C++的定义方式   空指针究竟指向了内存的哪个地方?

1,按照标准来说NULL和0是一样的int *p=new int(0)和int *p=new int(NULL)结果是一样的。

2,int *p=NULL和int *p=0;都是定义指针p并初始化指针p为指向0x00000000的地址(至少WINDOWS操作系统是这样的)。“0x00000000”此地址可理解为空地址。当然你也可以自己写个操作系统或编译器把该地址定为“0xFFFFFFFF",甚至更变态的地址

3,我们没有必要讨论NULL和0的区别。讨论不出结果的,因为操作系统,编译器已经做成这样子了。

char *p1=new char(‘1‘);
char *p2="123456";
cout<char *p3="NULL";char *p3=‘0‘;
char *p3=NULL;   char *p3=0;

int *p6=0;int *p7=new int(0);
cout<cout<<*p7<搞清楚以上这些就行了。
int *p=0;
int *p=1;//这个是错的;