C++基础(五)--void关键字

1、在C++中,void表示为无类型,主要有三个用途:

(1)函数的返回值用void,表示函数没有返回值。
    如:
    void func(int a,int b)
    {
        //函数体代码
        return;
    }
(2)函数的参数填void,表示函数不需要参数(也可以不填void,直接空着不写)

    int func(void)
    {
        //函数体代码
        return 1;
    }
(3) 函数的形参用void*,表示接受任意类型的指针
注意:
(a)不能用void声明变量,它不能代表一个真实的变量。
(b)不能对void*指针直接解引用,需要转换成其他类型的指针

比如,在下面这个函数中,直接对p解引用会报错,将p转化为其他类型的指针就可以了

void func3(string varname, void* p)
{
	//cout << varname << "是" << *p << endl;//对void*类型的指针直接解引用会报错
 	cout << varname << "是" << *(char*)p << endl;//将void*转换为其他类型就可以了
}

(c)其他类型的指针赋值给void不需要转换
(d)把void*指针赋值给其他类型的指针需要转换

2、本节重点:

        声明指针需要指定数据类型,是因为解引用的时候,必须知道数据占用的内存空间。但是用指针的目的不只是解引用,还有很多其他的用途,比如用cout输出字符型变量时,会显示“烫烫烫...”,此时可以加上void*进行转换

int a;
	char b;
	cout << "a的地址是:" << &a << endl;
	cout << "b的地址是:" << &b << endl;

	cout << "a的地址是:" <<(void*) &a << endl;
	cout << "b的地址是:" << (void*)&b << endl;

 也可以写一个函数来完成转换:(func1和func2对比)

void func1(string varname, int* p)
{
	cout << varname << "的地址是" << p << endl;
}

void func2(string varname,void* p)
{
	cout << varname << "的地址是" << p << endl;
}

调用函数

    func1("a", &a);
	func1("b", &b);//此行会报错,因为b的数据类型是char,&b就是char*类型,与func1函数定义的参数int*的类型不同

	func2("a", &a);
	func2("b", &b);


这种错误可以用一个强制转换就可以

	func1("a", &a);
	//func1("b", &b);//此行会报错,因为b的数据类型是char,&b就是char*类型,与func1函数定义的参数int*的类型不同
	func1("b", (int*)&b);//此行会报错,因为b的数据类型是char,&b就是char*类型,与func1函数定义的参数int*的类型不同

	func2("a", &a);
	func2("b", &b);


 不用强制转换的话, func2用void*的写法也没有问题

/*
	func1("a", &a);
	func1("b", &b);//此行会报错,因为b的数据类型是char,&b就是char*类型,与func1函数定义的参数int*的类型不同
	*/
	

	func2("a", &a);
	func2("b", &b);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值