c语言编程--指针常量、常量指针、空指针、野指针
来源:互联网 发布:catia v6软件下载 编辑:程序博客网 时间:2024/05/17 20:34
常量指针:指针所指向的内容不能改变,但是可以改变其所指向的地址。
2.
指针常量:指针所指向的地址不能改变,但是可以改变其所指向的内容。
分析:关键看本质是什么,常量指针----本质是指针,则指向内容可以变化,指针常量----本质是常量,则内容可以变化。指针数组和数组指针是一样分析。
3.
空指针(void pointers)
void 指针可以指向任意类型的数据。唯一的限制是被指向的值不能被直接引用(即不可以对它们使用解引符*),因为它的长度是不定的。
因此,必须使用类型转换操作或赋值操作来把 void 指针指向一个具体的数据类型。
p=NULL,就是说:内存单元0x*****不存放任何变量的内存地址。
空指针是一个特殊的指针值,也是唯一一个对任何指针类型都合法的指针值。指针变量具有空指针值,表示它当时处于闲置状态,没有指向有意义的东西。空指针用0表示,C语言保证这个值不会是任何对象的地址。给指针值赋零则使它不再指向任何有意义的东西。为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL. 程序里可以写 p = 0; 或者 p = NULL; 两种写法都把p置为空指针值。相对而言,前一种写法更容易使读程序的人意识到这里是一个指针赋值。
无类型指针 void * p
void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义。
void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
void的作用①对函数返回的限定。
②对函数参数的限定。
当函数不需要返回值时,必须使用void限定。例如: void func(int, int);
当函数不允许接受参数时,必须使用void限定。例如: int func(void)。
由于void指针可以指向任意类型的数据,亦即可用任意数据类型的指针对void指针赋值,因此还可以用void指针来作为函数形参,这样函数就可以接受任意数据类型的指针作为参数。例如:
void * memcpy( void *dest, const void *src, size_t len );
void * memset( void * buffer, int c, size_t num);
规则三小心使用void指针类型
按照ANSI(AmericanNationalStandardsInstitute)标准,不能对void指针进行算法操作,即下列操作都是不合法的:
void * pvoid;
pvoid ++;//ANSI:错误
pvoid += 1;//ANSI:错误
规则五void不能代表一个真实的变量
下面代码都企图让void代表一个真实的变量,因此都是错误的代码:
void a;//错误
function(void a);//错误
void体现了一种抽象,这个世界上的变量都是“有类型”的,
void的出现只是为了一种抽象的需要,如果你正确地理解了面向对象中“抽象基类”的概念,也很容易理解void数据类型。正如不能给抽象基类定义一个实例,我们也不能定义一个void(让我们类比的称void为“抽象数据类型”)变量。
判断指针是否为空的问题.很显然,if (p == NULL), if (p == 0)和if(p),都能够完成这一任务。
函数指针(Pointers to functions)
函数指针即指向函数的指针。它最大的作用是把一个函数作为参数传递给另外一个函数。
函数指针声明形式:
int (*f)(int, int);指针函数(Pointers of functions)
指针函数即函数的返回值为指针。
指针函数声明形式:
int * f(int, int);
- c语言编程--指针常量、常量指针、空指针、野指针
- 常量指针、指针常量、野指针、空指针概念解析
- 【编程语言】C++----常量指针与指针常量的区别
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL & 0
- C语言中的空指针、空指针常量、NULL_&_0
- C语言指针常量
- 空指针 空指针常量
- 常量指针 指针常量
- 常量指针 指针常量
- 指针常量,常量指针
- 常量指针&&指针常量
- 常量指针 指针常量
- 指针常量、常量指针
- java中的模式
- PAT (Advanced) 1043. Is It a Binary Search Tree (25)
- HDU 2255
- linux 操作如何自动启动和添加service 启动
- Java中常用的Filter过滤器
- c语言编程--指针常量、常量指针、空指针、野指针
- 增加手势和识别手势
- LeetCode-Evaluate Reverse Polish Notation
- 在eclipse里卸载已安装的插件
- Building a higher-level query API: the right way to use Django's ORM
- 动画编辑器和动画引擎的不同
- WP
- iOS开发中常用类目
- linux环境下的网络监听程序