c++ learning blog (1)

1, typedef 名字typedef机制为我们提供了一种很好的类型定义机制,对于程序忠一些不易懂的程序类型,通过typedef的定义增加程序的可读性!典型的两个用例是:1)增强复杂模板的可读性 
                             2)使得指向函数的指针,类型易读
示例:typedef double pe;typedef vector<int> vec_int;
 typedef int (*compare)(const int &a, const int &b);compare arr[10]; 
易错点: 对于下面的声明
typedef char *cstring;const cstring m; // 是个指针常量 即: char * const m; 而不是常量指针!!

2, C++中函数的传参;在默认的情况下函数的参数传递与 返回值传递都是拷贝传递,也就是说我们操纵的并非是那些参数本身而是他的拷贝,这显然出现了三种不方便:1)如果我们需要改变参数的值的时候 2)这个参数是个很大的成员。也就是说拷贝浪费太多时间; 3)需要带回来出返回值外的额外结果!
 解决方法:传进指针或者引用;两者之间的区别:
1)指针很显然传进来的是个指针(地址),而引用则是对象,这使得在一些程序中为了程序的易读性而采取引用的方式,EG: 重载操作符就往往是引用传递。
2)引用必然指向一个对象,而指针则不然,他可以指也可以不指,这个差别使得在一些情况下用指针比用引用来得好!
对于不想修改参数值的可以适当的加上CONST关键字来解决。
对于希望修改一个指针的参数值,可以声明一个指针的引用: int  *&m; //只修改指针本身而不是指针所对应的值。

数组参数传递是指针,代表他首元素的地址;而且数组参数的传递中默认情况下并进行数组长度的检查。对于这个问题解决的方法:1)增加一个长度参数; 2)传引用

省略号:参数列表中 ...省略号-->挂起类型检查 也就是说这边可以有0到多个未知的类型。
注意! int putValue();
          int putValue(...); 这两个函数不相同!
3,函数返回值
在返回引用值的时候应该注意的是:
1)局部对象的生命期问题,不能引用一个局部对象. (当然对于在程序中各个模块之间通讯的方法:全局变量还是参数,返回值中首选后者,因为前者如果过多会衍生很多的问题让程序不易拓展!)
2)返回一个引用,对返回值的任何修改都将改变被返回的实际对象。
eg:int  &getValue();
         main(){
             getValue()++// 返回的值也被修改!!
        }
4,指向函数的指针;
函数的类型不由函数名决定!
普通的函数调用实际上就是指针的调用;函数的入口地址。
int (*compare)(int a,int b); //注意与 返回指针的函数写法上的区别!

对于函数指针的赋值,显然是通过同类型的函数指针来赋值。
调用是与普通函数调用类似。
int m=compare(1,2);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值