免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1895 | 回复: 12
打印 上一主题 下一主题

这两种定义方式有什么区别? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-18 16:47 |只看该作者 |倒序浏览
在函数定义时:
void func(int i);
void func(const int i);
//以上两个声明其实一样

但是;
void func2(int *);
void func2(const int *);
//声明了不同的函数,编译无法通过(重复定义)。



why???

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-08-18 17:01 |只看该作者

这两种定义方式有什么区别?

谁说是一样的了?

论坛徽章:
0
3 [报告]
发表于 2005-08-18 17:09 |只看该作者

这两种定义方式有什么区别?

从编译来说,上面的不能通过,因为重复定义;下面的可以通过编译,执行也没有问题。


不好意思,帖子的两段注释应该是这样的:



//不能通过编译,因为重复定义



//可以通过编译,执行也没有问题

论坛徽章:
0
4 [报告]
发表于 2005-08-18 17:15 |只看该作者

这两种定义方式有什么区别?

C++ Primer上面的原话

论坛徽章:
0
5 [报告]
发表于 2005-08-18 17:24 |只看该作者

这两种定义方式有什么区别?

我觉得照着书上的理解就可以了,因为前面两个函数不会对按值传递的实参有影响。后面的两个则不一定了func2(int *)可以对实参的值进行改变,而void func2(const int *)是不能改变的实参的值的

论坛徽章:
0
6 [报告]
发表于 2005-08-18 18:18 |只看该作者

这两种定义方式有什么区别?

总感觉楼主的
第一个形参是变量
第二个是常量呢?
斑竹
我没有说错吧?
呵呵
要不我看错了?或者书上写错了?

论坛徽章:
0
7 [报告]
发表于 2005-08-18 18:31 |只看该作者

这两种定义方式有什么区别?

void func(int i);
void func(const int i);
//以上两个声明其实一样
这两个都是值参数传递,用不用const都一样,所以允许。
这里应当只有一个实现。
这两个属于函数原型的多次声明

void func2(int *);
void func2(const int *);
//声明了不同的函数,编译无法通过(重复定义)
这是两个不同的函数的原型,函数重载,应当提供两个函数实现。
一个函数的参数是可以改变的,另一个是常量,这就是这两个函数的不同之处,这两个函数属于函数重载。

关键在于const的含义。
C语言规定,函数可以多次声明,但只允许定义一次。

做测试如下

  1. void func(int i);
  2. void func(const int);
  3. void func2(int* a);
  4. void func2(const int* a);
  5. void func(const int i)
  6. {
  7. }

  8. void func2(int * a)
  9. {
  10. }

  11. void func2(const int* a)
  12. {
  13. }
  14. int main()
  15. {
  16.         return (0);
  17. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2005-08-19 09:10 |只看该作者

这两种定义方式有什么区别?

int i = 5;
func2(&i);
...

调用的是哪一个?

论坛徽章:
0
9 [报告]
发表于 2005-08-19 09:34 |只看该作者

这两种定义方式有什么区别?

[quote]原帖由 "renstone921"]C语言规定,函数可以多次声明,但只允许定义一次。[/quote 发表:


您说的定义就是具体实现吧?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-08-19 09:55 |只看该作者

这两种定义方式有什么区别?

[quote]原帖由 "luojiannx"]我觉得照着书上的理解就可以了,因为前面两个函数不会对按值传递的实参有影响。后面的两个则不一定了func2(int *)可以对实参的值进行改变,而void func2(const int *)是不能改变的实参的值的[/quote 发表:


^_^,多谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP