为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
海绵宝宝撒 2019-02-13 19:11:03
比如:a(){cout<<"book";}和a(void){cout<<"book";}和a(void *){......}这三个函数有什么区别,不要长篇大论,但要讲清楚
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

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) ){
  buff[sizeof(buff) - 1] = '/0';
  throw std::overflow_error("buff overflow");
  }



查看完整回答
反对 回复 2019-02-27
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

void参数表示没有参数的意思,和()表示的意思是一样的
void * 表示有一个指针类型的参数,无论是什么类型的指针,只要是指针就可以

查看完整回答
反对 回复 2019-02-27
  • 2 回答
  • 0 关注
  • 1137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信