记得初学c++时,照葫芦画瓢的写函数时用了void a,这是我遇到的第一个错误。后来初学指针,又在void*上绕了个小弯。也许还会有初学者弄不清void和void*,这里简单总结一下。
void是“无类型”
如果函数没有返回值,那么应声明为void类型
如果函数无参数,那么应声明其参数为void
void *则为“无类型指针”,void *可以指向任何类型的数据,如果函数的参数可以是任意类型指针,那么应声明其参数为void *
但是因为进行算法操作的指针必须是确定知道其指向数据类型大小的,所以不能对void指针进行算法操作。
void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:
void a;
这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。
void真正发挥的作用在于:
(1) 对函数返回的限定;
(2) 对函数参数的限定。
众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。
例如:
float *p1;
int *p2;
p1 = p2;
其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为:
p1 = (float *)p2;
而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换:
void *p1;
int *p2;
p1 = p2;
但是void *不可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。下面的语句编译出错:
void *p1;
int *p2;
p2 = p1;
提示“'=' : cannot convert from 'void *' to 'int *'”。
分享到:
相关推荐
rar文件包含:Vector.h、Vector.c、...存储数据使用void*、void**,其中包括结构体数据结构。主要功能有初始化动态数组、释放动态数组、尾插法、删除指定下标、更新指定下标数据、打印数据、获取数据对应的指定下标等。
- **基本概念**:`void*`可以指向任何类型的数据,这意味着任何类型的指针都可以赋值给`void*`而无需进行类型转换。例如: ```c int *pInt = (int *)0x1000; void *pVoid; pVoid = pInt; // 正确,无需类型转换...
### void及void指针含义的深刻解析 #### void的基本概念 `void` 是 C/C++ 语言中的一个关键字,它的字面意思就是“无类型”或“空类型”。`void` 在 C/C++ 编程中有着独特的用途,主要用于描述没有特定数据类型的...
rar文件包含:DoubleList.h、DoubleList.c、main.c...存储数据使用void*、void**,其中包括结构体数据结构。主要功能有初始化双链表、释放双链表、尾插法、任意插入法、任意删除法、打印数据(从左至右、从右至左)等。
【void】与【void*】详解 在C/C++编程中,`void`和`void*`是两个非常关键的概念,它们涉及到类型系统和内存管理。`void`关键字在编程中主要起到两个作用:表示无类型和限定函数或变量的类型。而`void*`则是一种通用...
6. **C与C++的区别**:在C++中,类型检查更加严格,函数参数为`void`意味着该函数不接受任何参数,而在C语言中,这种声明并不阻止传递参数。因此,良好的编程习惯是在C++中避免给`void`参数的函数传递参数。 7. **...
4. **兼容性**:`void`指针与其他类型指针之间的赋值转换遵循一定的规则。例如,从`void`指针到其他类型指针的转换是允许的,但反向转换(即从特定类型指针到`void`指针)需要显式转换。 5. **应用场合**:`void`...
7. **void 与泛型编程**: `void*`在泛型编程中起到关键作用,它可以用来实现不依赖具体类型的通用算法。但是,使用`void*`时必须特别小心,因为它可能导致类型安全问题,如丢失类型信息和需要手动的类型转换。 总之...
标题中的“error LNK2005 void __cdecl operator delete(void)”是一个常见的链接错误,它在C++编程中出现,通常涉及到多库编译时的符号重定义问题。这个错误表明在链接阶段发现了一个重复定义的`operator delete`...
C 语言中的 void 关键字和 void 指针类型是初学者容易混淆和误解的概念,本文将对 void 关键字的深刻含义进行解说,并详述 void 及 void 指针类型的使用方法与技巧。 void 的含义 void 的字面意思是“无类型”,...
- **函数调用**:当函数使用`void *`作为参数时,调用者需要确保传递的指针类型与函数期望的一致,否则可能导致未定义行为。 5. **void 与函数原型**: 函数原型对于编译器来说非常重要,因为它帮助编译器检查...
C/C++语言void及void指针深层探索 void是一个非常重要的关键字在C/C++语言中,它的设计哲学蕴藏着丰富的思想。作为一名程序设计人员,对void的理解和使用正确性直接影响到程序的正确性和可读性。 1. void的含义 ...
- **返回类型为void**:如果一个函数不返回任何值,那么应该声明其返回类型为`void`。这有助于避免编译器默认函数返回整型值的误解,同时增加了代码的可读性和规范性。 - **参数类型为void**:当函数不接受任何...
void的含义void即“无类型”,void *则为“无类型指针”,可以指向任何...②在ANSI C标准中,不允许对void指针进行算术运算如pvoid++或pvoid+=1等,而在GNU中则允许,因为在缺省情况下,GNU认为void *与char *一样。si
C++ 允许将任何类型的指针赋给 void*, 但不允许将 void 指针赋与给任何其他类型的指针。必须显示的类型转换。 在 ANSI 标准中,void 指针不能进行算法操作,即下列操作都是不合法的: void * pvoid; pvoid++; // ...
在C/C++编程中,`void`关键字和`void`指针扮演着至关重要的角色,尤其是在处理不同类型数据和函数参数时。本文将深入探讨`void`的含义以及`void`指针的使用方法。 首先,`void`表示“无类型”,意味着它不关联任何...
强制类型转换虽然允许`void *`与其他类型指针之间进行转换,但过度依赖这种转换可能导致潜在的类型错误,尤其是在大型复杂项目中。 总结来说,`void`和`void *`在C/C++编程中起着关键的作用,它们帮助实现无返回值...
【void关键字和void指针的理解】 在C/C++编程中,`void`是一个非常重要的关键字,它具有特殊的含义。`void`表示“无类型”,它主要用于两种情况:函数的返回类型和函数的参数类型。 1. **void的含义**: - 当用于...
在C++编程语言中,`void*`是一个非常特殊的指针类型,它可以指向任何数据类型。这个特性使得`void*`在处理通用性、多态性和动态类型转换时发挥着重要作用。本文将深入探讨`void*`在C++中的小作用,并通过一个简单的...