我们将从指针的语法和使用并结合例子来讨论他们的区别。
Void 指针:
void * pointer_variable;
void这是是作为一个关键字来使用。
参考指针的定义和使用,我们知道所定义指针的数据类型同指针所指的数据类型是一致的。所分配给指针的地址也必须跟指针类型一样。
例如:
int i;
float f;
int* exf;
float* test;
then
exf=&i;
int类型指针指向int变量的地址空间,所以是对的。
如果写成:
exf=&f;
这条语句就会产生错误。因为int类型的指针指向的是一块float变量的地址空间。同样,如果我们试图把float类型的指针指向一块int类型的地址空间,也是错误的,例如:
test=&i;
上面一条语句将会报错。
void类型指针是可以用来指向任何数据类型的特殊指针。
使用前面的例子,如果我们手动声明一个void类型指针:
void* sample;
在前面的例子中,如果我们定义的一个void类型指针去指向一个float变量的地址空间是完全正确的。
sample=&f;
同样,如果我们把这个void类型指针去指向一个int类型的地址空间也是正确的:
sample=&i;
void(类型)指针,是一种特殊的指针,它足够灵巧的指向任何数据类型的地址空间。当然它也具有一定的局限:
在我们要取得指针所指地址空间的数据的时候使用的是 ‘*’操作符,程序员必须清楚了解到对于void指针不能使用这种方式来取得指针所指的内容。因为直接取内容是不允许的。而必须把void指针转换成其他任何valid数据类型的指针,比如char,int,float等类型的指针,之后才能使用'*'取出指针的内容。这就是所谓的类型转换的概念。
NULL pointer(空指针):
NULL指针的概念不同于前面所说的void指针。NULL指针是任何数据类型指针的一种,并且使用0作为初始值(译者:这个好像要跟操作系统有关,有的系统把NULL 指针指向0地址,其他可能指向非零地址,对吧?有异议请留言)。当然这个不是强制性的。其表明NULL指针并未指向任何一块合法的(valid)的地址空间。
举例:
int* exforsys;
exforsys=0;
以上的声明表示exforsys是一个int类型的指针,但其不指向任何有效的地址空间,这表明exforsys有一个空指针值(0)。
Void指针和NULL指针的区别:
Void指针是一个可以指向任何数据类型的特殊指针。NULL指针可是是任何数据类型的但其不指向任何有效的地址空间或者引用。区分空指针和指针未被初始化是很关键的,比如,假如程序员写下:
#include <iostream.h>
int *exforsys;
void main()
{
*exforsys=100;
}
上面程序代码的输出如下:
NULL POINTER ASSIGNMENT
上面的程序抛出运行时的错误。表明指针变量exforsys还没有被分配任何有效的地址空间,并且试图存取0地址空间就产生了错误信息。
Author: UNKNOWN
Original Paper URL: http://www.exforsys.com/tutorials/c-plus-plus/c-plus-plus-void-pointer-and-null-pointer.html
更多关于NULL指针的AQ&A,参考:http://c-faq.com/null/
分享到:
相关推荐
"空指针和 0、NULL 之间的关系" 空指针和 0、NULL 之间的关系是编程语言中一个重要的概念,了解它们之间的关系对于编写高效、可靠的代码非常重要。 首先,让我们来了解什么是空指针常量(null pointer constant)...
指针和引用是C++语言中两种不同的概念,初学者容易把它们混淆一起。这两种概念都是地址的概念,但它们有很多不同的特点和应用场景。 相同点 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用...
C和C++中NULL和0的区别是指针编程中一个常见的概念,理解这两者的区别对编写高质量的代码非常重要。 首先,需要了解什么是空指针常量(null pointer constant)。根据C标准,空指针常量是一个整数常量表达式,值为0...
在C++中,引用(reference)和指针都是用来间接访问其他对象的工具,但它们在使用和行为上有显著的差异。引用的概念是C++特有的,而指针在C和C++中都存在。理解这两种机制的区别对于编写高质量的C++代码至关重要。 ...
在C++中,指针和引用是两种非常重要的数据类型,它们都用于间接访问其他变量或对象。然而,它们之间存在显著的区别,了解这些差异对于有效、安全地使用C++语言至关重要。 - **指针**是一种变量,其值是内存地址。...
### void指针深入解析 #### 一、引言 在C/C++编程语言中,`void`关键字及其关联的`void`指针类型是经常被提及但又常常被忽视的概念。初学者往往容易忽略`void`及其指针类型的重要性和用途,导致在实践中遇到不少...
由于标签部分与内容并不相关,因此我们将忽略这部分信息,直接从标题和描述中提取并展开相关的C++指针知识点。 ### C++指针基础 #### 1. 指针的概念与定义 在C++中,指针是一种特殊的变量类型,它可以存储内存...
在C++中,有几种特殊的指针类型,如void指针(`void *`)。它可以存储任何类型的数据的地址,但在使用前需要进行类型转换。另外,还有指针数组和多级指针,它们允许我们创建指向数组或指针的指针,提供更灵活的内存...
在C++中,0被直接定义为NULL指针。这种做法是为了提供一个统一的方式来表示一个指针没有指向任何有效的地址。 ##### 1.5 空指针的内部实现 虽然标准没有明确规定空指针的具体实现方式,但在大多数系统中,空指针...
### 详解C++中的this指针 #### 一、引言 在C++编程语言中,`this`指针是一个非常重要的概念,尤其在面向对象编程中扮演着关键角色。...掌握`this`指针的概念和用法,是每个C++程序员的基本技能之一。
### C++ 第四讲:数组与指针 #### 数组部分 ...综上所述,数组和指针是C++中非常重要的概念,它们提供了灵活的数据组织和处理方式。正确理解和运用数组与指针对于编写高效、安全的C++程序至关重要。
在C++中,NULL实际上是一个void*指针,它的值是0。这意味着,当我们使用NULL时,实际上是将0赋值给指针变量。这样做的原因是为了解决函数重载后的函数匹配问题。当我们使用NULL作为函数参数时,编译器可以根据NULL的...
本文将深入探讨C++指针的使用方法,并总结一些关键知识点,帮助开发者更好地理解和运用这一强大的工具。 首先,我们要了解什么是指针。在C++中,指针是一个变量,它存储的是另一个变量的内存地址。这种特性使得指针...
C++指针参数传递内存详解 C++中的指针参数传递是一种常见的编程技术,但是许多开发者对其机理不甚了解,本文将深入剖析C++指针参数传递的内存机理,解决开发者们长期以来对函数指针参数传递的误解。 函数指针参数...
### C++指针运算与函数、数组 #### 学习目标 本章节旨在帮助学习者掌握C++中指针的基本运算及其与函数、数组之间的交互使用。具体目标包括: 1. **掌握指针的赋值运算和算术运算**:这涉及到如何正确地将地址赋予...
C++指针和引用 本资源主要介绍了C++语言中的指针和引用概念,包括指针的概念、指针变量、指针与数组、指针与函数、指针数组与二级指针、动态分配/释放内存、引用等知识点。 1. 指针的概念 指针是内存单元的地址,...
在编程世界中,C 和 C++ 语言中的指针是一个非常关键的概念,它们赋予了程序员直接操作内存的能力,使得程序可以高效地运行。指针是理解这两种语言底层工作原理的关键,同时也是许多高级技术如动态内存分配、数据...
此外,C++还支持void指针,它可以指向任何类型的数据。在示例程序5.2中,我们看到如何声明一个void指针并将其转换为其他类型的指针,以便能够访问不同类型的变量。 总之,C++的指针是强大的工具,它们允许程序员...
在C和C++编程语言中,`NULL`和`0`都经常被用来表示空指针,但它们之间存在一些微妙的区别。以下是关于这些概念的详细解释: 1. **空指针常量(null pointer constant)**:根据C语言标准(C99,ISO/IEC 9899:1999)...