C++ Primer 第六章 函数

来源:互联网 发布:单片机温度计原理图 编辑:程序博客网 时间:2024/05/16 09:42
  • 函数有的输入参数是形参,实参是形参的初始值,实参类型必须和形参类型匹配。int main(void)显示定义没有形参。形参作用域是函数块内。形参初始化的机理与变量初始化一样
  • 传递指针对象,也是进行指针的拷贝,形参数值改变不会影响实参指针的值,但是改变形参所指对象会改变实参所指对象。传递参数实际就是实参拷贝给形参的过程。形参本身数值改变都不会影响实参的数值
void func(int *ptr){    *ptr = 0;//将实参所指对象清0,影响实参所指对象     ptr = NULL;//形参可以请NULL,并不会形象实参}void main(void){    int a = 10;    func(&a);//这里仅仅将a的地址拷贝给了ptr。}
  • 传引用参数是C++特有,可以说明一下。拷贝大的类型效率低下。可以通过引用形参访问类型。
bool isShorter(const string &s1 , const string &s2){    return (s1.size() < s2.size() );}//无需修改实参的数据,使用了const,并且这个无需拷贝,速度效率更加快。
  • 可以和指针类似,通过引用参数返回额外的信息,和指针类似,因为两者都可以通过指向,直接修改实参的数值,很聪明。利用c语言指针和c++引用返回一个字符串某一个字符个数和第一个的下标
//c语言指针版本,利用指针。int find_char(char *s , char c , int *cnt){    int ret = 0;    char *sbuf = s;    while(*s != '\0'){        if(*s++ == c){            (*cnt)++;            if(*cnt == 1)                ret = s - sbuf;        }    }    return ret;}int main(int argc  , char *argv[]){    int cnt = 0;    int ret;    ret = find_char(argv[1] , 'u' , &cnt);    printf("%d  %d\n" , cnt , ret);}

./C++Debug/Cplusplus wangufdfeunfdgf
2 5

//C++版本,利用引用string::size_type find_char(const string &s , char c , string::size_type &cnt)//引用类似与指针{    string::size_type ret;    for(decltype(s.size()) i =0 ; i != s.size() ; ++i)    {        if(s[i] == c){//这里用引用可以避免大量复制,用const声明为了防止错误改变实参.            cnt++;//这里用引用可以提供类似与指针的功能            if(cnt == 1)                ret = i;        }    }    return ret;}int main(int argc  , char *argv[]){    string::size_type ret = 0;//类里面所定义的独立类型。    string::size_type cnt = 0;//类里面所定义的独立类型。    string s = "wangjunununjfd";    ret = find_char(s , 'u' , cnt);//注意参数传递的方法,就是直接传递进去。    cout << cnt << endl;    cout << ret << endl;    exit(0);}

未完待续。。。。。

原创粉丝点击