C++用void作为函数参数有什么作用

2020-11-23 19:38:01 字数 6598 阅读 9504

1楼:ever磊

void* 的意思是这是一个指针,你可以在函数中将这个指针转换为任何一个数据结构的指针。

可以说void*功能是相当强大的。

例如,在你设计模块间接口时,暂时无法判定传参类型。

就可以通过void*传入,在函数中将指针转化你需要的类型就可以了。

2楼:马贞和浩宕

void

setvalue(double);代表没有返回值double

getsine(void);代表没有形参

void的英文函数是没有或者是空

函数里面

void放在前面代表没有返回值

void放在后面代表没有形参或者是空形参的意思

c++函数的参数为 void *类型表是什么意思??

3楼:匿名用户

void参数表示没有参数的意思,和()表示的意思是一样的

void * 表示有一个指针类型的参数,无论是什么类型的指针,只要是指针就可以

4楼:hui翙

void类型:

void类型其实是一种用于语法性的类型,而不是数据类型,主要用于作为函数的参数或返回值,或者定义void指针,表示一种未知类型。

作为函数参数与返回值:

void func( void );

void func( );

例如上面两例,其实两种声明方式是等效的,在c++中如果参数列表为空,默认的参数类型即为void,但建议没有参数时使用void以提高程序的可读性。

因为c++在定义函数时不允许返回值类型为空,在c++98之前,是允许定义函数时不定义返回值的,默认的返回值是int类型。其实默认int类型并不是好事,如果函数有返回值在函数返回时是需要消耗cpu传递返回值的,也或许也是c++98标准将默认返回值类型改为void的原因。

因为c++不允许默认返回值,所以当函数不需要返回值是,需要将返回值类型声明为int类型。当调用返回值类型为void类型的函数时,在工程上有很多实际**在前面加上(void)类型转换,以提高**的可读性。如调用上面定义的

func函数。

(void)func( );

从另一个角度讲,这样严谨的方式是可以提高软件的健壮性的,调用函数时可以明确地看出是没有返回值的,如果调用一个返回值不是int类型的函数时最好判断其返回值,以检查函数调用是否成功,如:

#include

char buff[5];

func( );

snprintf(buff, sizeof(buff), “%d”, “10240”);

显然这段**是有问题的,当然func没有返回值,这样调用是没有问题,但snprintf的调用会有问题因为缓冲区有可能太小而不能容纳结果字符串,上面的**就有这个问题。假设我们不知道snprintf有没有返回值,可能这个bug我们不会发现,直到有一天出现了我们不期望的结果。如果我们严格要求调用每个函数时必须判断函数的返回值,按照以下面的**编码,就不会出给我们的程序造成隐患。

#include

#include

char buff[5];

(void)func( );

if( sizeof(buff) <= snprintf(buff, sizeof(buff), "%d", 10240) )

5楼:sym_东方不败

void指的是空类型,void*就是空指针,意思是函数的参数为空,可以省略不写。

c++中设计一个函数用指针作为输入参数有什么好处? 比如a(* b)

6楼:匿名用户

其意义有三点:

要传递一个很大的结构体或类对象,但是并不想在调用方法时额外申请一个对象的空间,此时可以使用指针来传递参数,此时函数内部可以通过指针访问该对象。

想在方法中修改某个输入参数的值时,此时需要借助于传址操作,传递要修改参数的指针给方法。

在实际应用中上面两个场景的目标在c++中都可以使用引用来达成。

当方法需要使用一个参数在不同的调用情况下输入多个不同的对象类型时,可以使用指针进行参数传递,此时可以在运行时将指针的类型强制转换为对应类型对象的指针即可。例如windows的消息方法,其wparam和lparam都是一个void类型的指针,而消息传递的参数类型实际上是多种多样的。

7楼:匿名用户

可以在函数里面修改这个指针指向的值。

c++中的void**

8楼:语澍璐远

void真正的用途在下面两个方面:

对函数返回值的限定

对函数参数的限定

比如,函数没有返回值,那么函数可能会声明成这样:void fun(int a);

如果函数有返回值,但是函数没有参数,那么函数的可能会声明成这样:int fun(void)。

以上的情况都是很好理解的。下面介绍void *的一些用法。

1. 函数可接受任意类型的指针。

用过memset或者memcpy的细心的人会发现,在gcc中编译类似下面的**都不会有警告:

int a;

int *p = &a;

memset(p, 0, 4);

或者char c[4];

char *p = c;

memset(p, 0, 4);

为什么memset传int *还是char *都没有问题呢?我们知道不同类型间复制是要进行强制转换的,那么这里为什么不用强制类型转换呢。我们看memset的原型会发现,memset的第一个参数就是void *。

2. void *类型可以接受任意类型指针。

例如:void *p1;

char *p2 = “hellp”;

p1 = p2;

这是没有问题的,任何类型的指针都可以直接赋值给它,无需进行强制类型转换。但需要注意的一点是,void *的类型并不能无需类型转换直接赋值给其他类型,比如malloc的返回值是void *,那么我们一般这样写:char *p = (char *)malloc(4);

c++ 本程序里void在里面有什么用,为什么写它,别的函数前就不写?

9楼:

void表示init这个函数没有返回值。其实c也要写,只是c在前面是int时可以“省略”,而c++放弃了这一功能,所以除构造函数什么都不写以外,其余函数定义时前面都必须写返回类型,没有返回值时写void。

10楼:匿名用户

location(int m, int n)是构造函数,不能添加返回类型

init无返回值,所以添加void返回类型getx/y返回int,所以是int返回类型main返回0,所以是int返回类型

void指无返回值,在形参列表中,void可不写

11楼:数据流谷雨

void表示没有返回值,别的函数有返回值,比如int,所以要写

12楼:匿名用户

void表示没有返回值.函数没有返回值,那么前面要写void.

13楼:js术术

void是无值型嘛,就是不用返回任何值。

c++中一个函数作为作为另一个函数的参数该如何解释

14楼:匿名用户

一个函数(actionfun)作为另一个函数的参数(mainfun),实际上是在运行主函数mainfun的时候,得到的一些数值传入到actionfun函数中,actionfun为主函数做一些设置也可以执行一些其他的功能,但都要从主函数mainfun中得到参数。 举例如下:

在.h中声明一个类型 和actionfun参数等一样typedef int (*fun)(int tpart);

在.cpp中

int actionfun(int tpart)void mainfun(tag_t p_tag,fun actionfun)

大体就是这样使用的。

15楼:go陌小洁

把函数名作为参数就是函数的地址了.

如下面的例子

#include

using namespace std;

typedef int (*pfun)(int a, int b);//函数指针

int add(int a, int b)void fun(int a, int b, pfun pfun) //函数指针作为函数的参数

16楼:匿名用户

把函数名作为参数就是函数的地址了.

比如_beginthread()

这个函数,

void thread()

{}_beginthread( thread, 0, 0)就是启动thread作为一个线程.

17楼:匿名用户

应该是把某个函数的最终返回值作为另一个函数的参数。就是在调用的时候先去计算某函数的值,之后再把它作为调用它的函数的参数并带入此函数的计算。

18楼:匿名用户

typedef void (*p) (void);

void invoke(p);//p is a pointer to a fuction

void output();

void output()

void invoke(output)

c++中我想选一个函数作为参数应该怎么做?给个通俗点的例子谢谢啦!

19楼:匿名用户

void a1(int& i); // 这个函数作用是把参数i加1

void a2(int& i); // 这个函数作用是把参数i加2

void fun(int val, void (*cf)(int&))

void main()

不过一般来说void fun(int val, void (*cf)(int&))这样的声明比较难看懂.

所以写的时候会用typedef来定义一下.

typedef void(*cf_type)(int&); // 定义cf_type为函数指针类型

void fun(int v, cf_type cf); // 这样就比较好看了

20楼:匿名用户

对的,使用函数指针!

21楼:匿名用户

比如void fun( void (*f)(int) );这个函数接受一个返回为空,参数为int 的函数名为参数。

c++的main函数中的参数有什么用?

22楼:匿名用户

除了void就是一个int一个char数组#include

#include

int main(int argc, char* argv)试试这个

test andy

23楼:匿名用户

当你在cmd 命令行输入的时候,有时候需要带参数

比如你打: ***x.exe /a /b...

这个后面的/a /b等等内容,就是main函数用来接收的参数,你就可以自己根据参数的不同,来运行不同的**了。就这么简单。

24楼:万年冰霜

昏了,你学c++多久阿?

这是最基本的传参阿。当main里面需要用到外部参数数据传入的时候就要在括号里加参数了。

不如你要比较3个数大小,而这3个数不是预先写在程序里的,而需要运行后再给出的,那么就需要把参数穿进去了。

25楼:匿名用户

我学c的时候,讲到main函数里面的参数时,老师说,等以后用到了我们再讲,不过好像一直没用到过,所以就没有讲。

c++ * a和*&a作为函数的参数时有什么区别?

26楼:匿名用户

如果你说的是函数的形参,那么

void foo(int* ptr);

是传值调用,比如你这么调用

int a;

int* pvalue = &a;

foo(pvalue);

这样的情况下,pvalue的值是不能被函数foo改变的,也就是pvalue肯定是指向a的。

但是如果你这么声明

void foo(int*& ptr);

则是传递引用,那么如果你函数里面

void foo(int*& ptr)

这样调用过之后,pvalue就变成了null。而第一种情况pvalue是不能被改变的。

引用是c++带来的很重要一个特性,他在很多情况下避免了使用指针。而且,在c++里面,引用是不可以捏造的,比如c你可以很容易弄一个null的指针,而引用这不存在null引用。

上面的foo函数如果要用c来实现,则必须用指针的指针:

void foo(int** ***r)

调用的时候要foo(&pvalue)

这种技术很多用在比如定义一个安全删除指针的函数,所谓安全就是,只有当指针为零的时候才执行删除,删除之后,立刻把指针赋值为null。

template

inline safe_delete(t*& ptr)

}在c++里面,能不用指针都应该尽量避免,stl里面就大量使用引用。

能否用void指针作为参数,使函数按引用接受一般指

1楼 千锋教育 不可移植。c 中没有一般的指针的指针类型。void 可以用作一般指针只是因为当它和其它类型相互赋值的时候, 如果需要, 它可以自动转换成其它类型 但是, 如果试图这样转换所指类型为 void 之外的类型的 void 指针时, 这个转换不能完成。 使用 指针 进行函数参数传递有何特点 ...

c++函数前面加有什么作用,C++类的成员函数前加&什么意思

1楼 人生多问 如果这个函数的返回值不是void,那 的作用是指函数的返回值是引用类型,这个符号是与返回值配对的 这就是指返回值是引用 2楼 匿名用户 是用作 且 ,表示并列。 逻辑上表示两者属于缺一不可的关系,还可以表示一个人和另外一个人之意,与and同义。如a b,表示a与b,a和b。 字符 的...

如何定义不定参数函数,C++定义栈怎么定义,该有什么函数

1楼 匿名用户 举个例子 ,传入不定参数函数printf typedef int fun const char void func fun fp int main c 定义栈怎么定义,该有什么函数 2楼 千锋教育 1 进栈 push 算法 若top n时,则给出溢出信息,作出错处理 进栈前首先检查栈...