c语言学习--空指针

来源:互联网 发布:烈焰遮天源码下载 编辑:程序博客网 时间:2024/05/16 17:55
1.
void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来.还有'\0',这也不是空指针所指的内容. '\0'是表示一个字符串的结尾而已,并不是NULL的意思.真正的空指针是说,这个指针没有指向一块有意义的内存,比如说:char* k;这里这个k就叫空指针.我们并未让它指向任意地点.又或者char* k = NULL;这里这个k也叫空指针,因为它指向NULL 也就是0,注意是整数0,不是'\0'一个空指针我们也无法对它进行取内容操作.空指针只有在真正指向了一块有意义的内存后,我们才能对它取内容.也就是说要这样k = "hello world!";这时k就不是空指针了.2.
如果函数的参数可以是任意类型指针,那么应声明其参数为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++中语法要求更严格,不允许直接对空指针赋值,而必须先进行类型转换。3.指针指向的是地址,地址指向的是内容:

我们需要一个变量,来存储地址,这个变量的值是地址,但是我们可以通过修改变量的值,来不断的改变地址,但是,我们如果需要改变该个地址的值的话,就需要,

对地址的值进行修改,而不改变地址。

4.

空指针定义:#ifdef NULL#undef NULL#ifdef _cplusplus#define NULL 0 /* 空指针值 */#else#define NULL ((void*)0) /* 空指针常量 */5.

常量指针和指针常量有什么区别

int a;int * const p = &a    //指针常量,*p可以修改*p = 8;(OK)                                                   p不可以修改 p++(ERROR)int a,b;const int *p = &a;//常量指针    *p不可修改 *p = 8;(ERROR)                                                  p 可以修改 p = &b  (OK)还有一种const int * const p = &a;    // *p 和 p均不可改变了


关键要看const修饰的是谁int const     const int的写法是一样的指针的话看const离谁( 是‘*’  还是‘指针变量名’)比较近就是修饰谁的,比如const *   表示带*运算对象的是常量,也就是*p 不可变 (暗示p可变,p不带‘*’ 嘛)* const 变量名  表示变量名是常量  也就是p不可变 (暗示*p可变,const没有修饰‘*“ 嘛)




0 0
原创粉丝点击