1.在c和c++中特定指针与通用指针相互赋值的问题
特定指针 如:int ,char ,float *
通用指针 如:void*
int main()
{
int a=10;
int *p=&a;
char b='y';
char *cp=&b;
void *vp=cp; //特定指针赋给通用指针
//cp=vp; //通用指针赋给特定指针,在c中可以,在c++中不可以
return 0;
}
(1)在c和c++中,特定指针可以赋给通用指针,用于临时存储地址,但缺点是:一是因为没有类型,无法确定内存大小,因此无法解引用;二是无法调整权重,所以不能进行算术运算
(2)在c中,通用指针可以赋给特定指针,但在c++中,通用指针不可以赋给特定指针,在c++中这样规定是为了杜绝不同类型的指针相互赋值
2.c和c++中的NULL的不同定义
在c中,NULL 即(void *)0
在c++中,NULL 即 0
注意:
(1)其实在c中,NULL 也可以是 0,但是因为c语言当时没有考虑到0的问题,已经规定了NULL 为(void *) 0
(2)假如在c++中NULL是(void*)0,则int * p=NULL即 int * p =(void *) 0,这在c++中编译是无法通过的,因为c++中通用指针不可以赋给特定指针。所以在c++中NULL 是 0