求大神帮忙

工藤邦明 2017-12-09 02:07:01
如图所示,我有两个疑问,第一个是为什么第九行char na[20]一定要有缺省值?第二个是警告第18行不允许把字符串的首地址赋给指向char的指针,但是我看书上还是这么用的,这是为什么?拜托各位解答下
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
工藤邦明 2017-12-16
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:

//1:如果一个默认参数被指定,那么之后的参数也必须有默认参数。
Student(int n = 0, char name[20]); //这样子可能不直观
//假设
int fun(a = 0, int b);
//那么 fun(1) 我这个该怎么判断,1是指定为a的实参,还是b的实参?
//所以标准规定如前述

//2:"xxxsss" 这样子的字符串,类型为 const char *,const char* 是不能隐式转换为char *类型
//因此,最好的做法是,修改函数的声明为:
Student(int n, const char name[20]/* 也就是相当于const char *name */);
不好意思,给分给错了。。。
paschen 版主 2017-12-10
  • 打赏
  • 举报
回复
paschen 版主 2017-12-10
  • 打赏
  • 举报
回复
1、因为有缺省值的参数一定要在没有缺省值的参数的右边,你的第一个参数n是有缺省值的,所以后面的参数都得有缺省值,除非你把第一个参数放到最右边
AlbertS 2017-12-09
  • 打赏
  • 举报
回复
引用 1 楼 jianwen0529 的回复:

//1:如果一个默认参数被指定,那么之后的参数也必须有默认参数。
Student(int n = 0, char name[20]); //这样子可能不直观
//假设
int fun(a = 0, int b);
//那么 fun(1) 我这个该怎么判断,1是指定为a的实参,还是b的实参?
//所以标准规定如前述

//2:"xxxsss" 这样子的字符串,类型为 const char *,const char* 是不能隐式转换为char *类型
//因此,最好的做法是,修改函数的声明为:
Student(int n, const char name[20]/* 也就是相当于const char *name */);
此楼最棒
小熊之怒 2017-12-09
  • 打赏
  • 举报
回复
楼上讲的真详细,好久没用c++这些都忘了,看了他写的,瞬间有记起来了。
幻夢之葉 2017-12-09
  • 打赏
  • 举报
回复

//1:如果一个默认参数被指定,那么之后的参数也必须有默认参数。
Student(int n = 0, char name[20]); //这样子可能不直观
//假设
int fun(a = 0, int b);
//那么 fun(1) 我这个该怎么判断,1是指定为a的实参,还是b的实参?
//所以标准规定如前述

//2:"xxxsss" 这样子的字符串,类型为 const char *,const char* 是不能隐式转换为char *类型
//因此,最好的做法是,修改函数的声明为:
Student(int n, const char name[20]/* 也就是相当于const char *name */);

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧