在c语言中,void指针可以指向任意类型变量,但是在输出指向的变量时,不能像一般指针那样printf("%d",*p);输出,而需要进行强转输出,具体代码如下:
#include<stdio.h>
int main() {
int a=5;
void *p=&a;
int *p1=&a;
printf("%d\n",p);
printf("%d\n",*(char*)p);
printf("%d\n",p1);
printf("%d\n",*p1);
return 0;
运行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030413060124.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMTc2Njk5,size_16,color_FFFFFF,t_70)
在c语言中,void指针可以指向任意类型变量,但是在输出指向的变量时,不能像一般指针那样printf("%d",*p);输出,而需要进行强转输出,具体代码如下:#include<stdio.h>int main() { int a=5; void *p=&a; int *p1=&a; printf("%d\n",p); printf("%d\n",*(char*)p); printf("%d\n",p1); printf("%d\n",*p1); return
int (A:: *pfun)(int) = A::fun;
由于类不是运行时存在的对象。因此,在使用这类指针时,需要首先指定A类的一个对象,然后,通过对象来引用指针所指向的成员。例如,给pc指针所指向的数据成员c赋值8,可以表示如下:
a.*pc = 8;
其中,运算符.*是用来对指向类成员的指针来操作该类的对象的。
如果使用指向对象的指针来对指向类成员的指针进行操作时,使用运算符->*。例如:
A *p = &a; //a是类A的一个对象,p是指向对象a的指针。
p ->* pc = 8;
让我们再看看指向一般函数的指针的定义格式:
关于给指向函数的指针赋值的格式如下:
关于在程序中,使用指向函数的指针调用函数的格式如下:
(*)()
如果是指向类的成员函数的指针还应加上相应的对象名和对象成员运算符。
下面给出一个使用指向类成员指针的例子:
#include
class A
public:
A(int i) { a=i; }
int fun(int b) { return a*c+b; }
int c;
private:
int a;
void main()
A x(8); //定义类A的一个对象x
int A::*pc; //定义一个指向类数据成员的指针pc
pc=&A::c; //给指针pc赋值
x.*pc=3; //用指针方式给类成员c赋值为3
int (A::*pfun)(int); //定义一个指向类成员函数的指针pfun
pfun=A::fun; //给指针pfun赋值
A *p=&x; //定义一个对象指针p,并赋初值为x
cout<*pfun)(5)<<endl; //用对象指针调用指向类成员函数指针pfun指向的函数
以上程序定义了好几个指针,虽然它们都是指针,但是所指向的对象是不同的。p是指向类的对象;pc是指向类的数据成员;pfun是指向类的成员函数。因此它们的值也是不相同的。
对象指针和对象引用作函数的参数
1. 对象指针作函数的参数
使用对象指针作为函数参数要经使用对象作函数参数更普遍一些。因为使用对象指针作函数参数有如下两点好处:
(1) 实现传址调用。可在被调用函数中改变调用函数的参数对象的值,实现函数之间的信息传递。
(2) 使用对象指针实参仅将对象的地址值传给形参,而不进行副本的拷贝,这样可以提高运行效率,减少时空开销。
当形参是指向对象指针时,调用函数的对应实参应该是某个对象的地址值,一般使用&后加对象名。下面举一例子说明对象指针作函数参数。
#include
class M
public:
M() { x=y=0; }
M(int i, int j) { x=i; y=j; }
void copy(M *m);
void setxy(int i, int j) { x=i; y=j; }
void print() {
今天做项目时,需要调用另一个项目的下载图片的请求,而这个请求返回值时void,并且通过OutputStream.write()输出输出流,一时间不知道如何获取到。经过查验资料,得到如下方法。
请求中的代码如下:
public void downLoadPic(){
...省略部分代码...
OutputStream os = response.getOutputStre...
void含义
void的字面意思是"无类型",
void*则为"无类型
指针",
void*可以
指向任何类型的
数据。
void几乎只有"注释"和限制程序的作用,定义一个
void变量没有意义,不妨试着定义:
void a;
这行语句编译时会出错。不过,即使
void a的编译不会出错,它也没有任何实际意义。
void真正发挥的作用在于:
(1)对函数返回的限定;
(2)对函数参数的限定。
Void 指 针 和 NULL 指 针
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
开发工具与关键技术:C语言
撰写时间:2022/3/17
Void是无类型指针,单独输出它会报错,但是在它后面加一个*,就变成了void指针,那可就厉害了。
一、void函数
void在函数和变量中的含义详解
void表示无类型的意思,无类型可以包容有类型,可以用其定义的函数获得各种想要输出的数据类型,比如各个视觉库自定义的图片类型等。但是void定义的函数没有返回值,而其中定义的形参作用域只在函数内,无法把计算结果传出去。当通过链接库调用一个函数时,用全局变量的方法来得到输出结果显而是不适用的。
二、void函数通过引用和指针返回处理结果
2、实际例子
(1)将函数要输出的结果定义为
指针的值(
指针目标对象的内存首地址)
指针指向对象的类型
注意点:
void指针只保存了
指针的值并没有记录
指针指向对象的类型。因此在用到对
void指针解引时,需要先把
void指针转换成原本的
数据类型。
int n = 500; //定义一个int变量
int * p = &n; //定义int类型
指针
void * pv = p; //定义
void指针,只保存了..