c语言编程问题
下面是书上例题,有几处不懂:
#include<iostream>
using namespace std;
class Time
{
puulic:
int hour;
int minute;
int sec;
};
int main()
{
void set_time(Time&);
void show_time(Time&);
Time t1;
set_time(t1);
show_time(t1);
Time t2;
set_time(t2);
show_time(t2);
return 0;
}
void set_time(Time& t);
{
cin>>t.hour;
cin>>t.minute;
cin>>t.sec;
}
void show_time(Time& t)
{
cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}
1、main函数里的“void set_time(Time&);
void show_time(Time&);”,为什么括号里是Time&呢?什么含义?
2、void set_time(Time& t);
void show_time(Time& t)
括号里又为什么是Time& t呢?什么含义?
谢谢。。。。
追问:不知所云来混分呢你?
答案:一楼的别误导人啊。
介就是引用功能的啦,比如:
int b;
int &a = b;
那么a 就是 b的别名了,再形象一点,比如有个银叫张三,他还有个小名叫小三,那么小三就是这个a,张三就是这个b了,懂了吧。建议楼主回去好好看看谭浩强老师的书吧.....囧。
其他:1 声明函数。指针参数
2 指针参数 传引用 C不支持哦,只有C++编译器才支持,你这个应该是C++的问题了
函数原型可以不给参数名,只给参数类型
传引用同 void set_time(Time *t); 类似
只不过 调用时 funcxx(&p) 取地址 的方式由编译器帮你搞定了调用者不用取地址,调用时非常“舒服” 如 funcxx(p) 就行了,实际传的是&p
建议少用这种方式,因为调用者不注意的话都不知道是取了值,还是取了地址
--------------------------------------
建议少使用理由错了,这种方式使用比C的指针方便,但我是鼓吹代码最大限度的可重用,显然用这种方式在C中就没法使用了,所以还是用原始的“指针”方式代码可移值度最好! Time& t 定义了一个Time类型的 引用,相当于给传进来的参数去了一个别名。
引用的原理和指针很像,区别指针传入的参数为变量类型的指针,而引用传入的直接是变量类型。你可以理解为虽然定义了一个t的Time类型结构变量,但是使用的存储空间指向传入的参数,相当于使用了已存在的传入变量在子函数里做计算,因此使用引用不会产生数据的副本,也不会有数据复制的过程,从而节约时间和内存,这一点在向函数传入大型结构或者类的实体时很有用。
引用的具体好处:
1.可以向主函数返回多个数据。
这点用法和指针类似。我们知道函数的类型决定了函数的返回值类型,如果函数有多个或者多种数据需要传递给主函数,返回值的方法肯定是不够用的,使用指针或者引用就可以解决这个问题,因为子函数直接基于传入的参数进行计算,所以在计算的过程中就已经将所有计算结果返回给了主函数。
2.与直接传递变量的做法相比,更能节约时间和内存:
这点也与指针类似,前面已经讲过,不重复了。
3.避免指针类型转换和空指针的意外。
与指针相比较。引用定义的类型直接是变量类型,不需要经过转换,因此降低了编程复杂度,提高了程序的直观度,另外,在任何时候引用都不允许有空引用的存在,例如,下面的这种定义方法是不允许的:
int a=3;
int& b;
b=a;
要改为下面赋值方易做图确:
int a=3;
int& b=a;
因此相对指针而言,引用降低了程序由于人为疏忽忘记赋值而出错的风险。 楼上说的对 printf("%i ", numbers[j]);
在后面加一个空格,输出的是:1 1 2 4 8 16 32 64 128 256
当执行2个for之后赋值如下:
numbers[0]=1
numbers[1]=numbers[0]=1
***
**
numbers[9]=numbers[0]+***+numbers[8]=256
上一个:求个好用的Visual C++6.0 软件 我刚刚开始学c语言 准备考c语言2级考试 用的是谭浩强的c语言设计那本书
下一个:求C语言改错...