其实引用是绑定一个变量或常量,且一旦绑定不可改变所以在用引用时必须对其初始化,且非常量引用不可直接绑定字面值即一个数,只能通过变量进行绑定
2017-07-17
可以把别名理解为一种远程导弹,而变量就是近距离武器,别名的好处就是传递给函数的时候可以远程打到原来的地址的值,而变量因为发生了复制,打不到了
2017-07-17
内联函数, 在函数签名之前要加上inline, 这样函数代码块会替换掉调用出的那行函数名, 这样减少了函数调用栈push和pop stack的开销.
为啥不什么地方都用inline呢? 首先, inline是建议性的, 由编译器决定具体是否替换代码(递归是坚决不会进行替换的); 其次, 内联函数只适合逻辑简单, 且调用频繁(不停的call这个函数), 如果内联函数中有for, while循环的话, 往往效果不好, 不如单独给其一个函数栈来使用. 最后, 递归函数是无法使用内联方式的.
为啥不什么地方都用inline呢? 首先, inline是建议性的, 由编译器决定具体是否替换代码(递归是坚决不会进行替换的); 其次, 内联函数只适合逻辑简单, 且调用频繁(不停的call这个函数), 如果内联函数中有for, while循环的话, 往往效果不好, 不如单独给其一个函数栈来使用. 最后, 递归函数是无法使用内联方式的.
2017-07-17
最赞回答 / JUST_4_IT
数组numArr[3]={3,8,6},数组长度其实是4,由于只是初始化了前三个,所以默认第四个为‘0’({3,8,6,0}),所以numArr[3]=0,在调用getMax的时候就是在比较0,3哪个大了,所以返回值是3.
2017-07-13
&符号就是取地址符号, 含义只这么一个; *符号就是创建一个指针, 或者做一次地址跳转;
int a = 10; // 给a分配一个内存逻辑地址0x100001, 这个地址存放了值10;
int *p = &a; //创建变量p, 给p分配地址0x100002, 这个地址存放的值是"0x100001"(a的逻辑地址值);
int *&q = p; //创建变量q, 给q分配地址也是0x100002, 因此这个地址存放的值还是a的逻辑地址值;
*q = 20; //访问存放在q变量地址下的值, 获得了a的地址值, 再访问一下a的地址值, 修改上面的内容为20;
int a = 10; // 给a分配一个内存逻辑地址0x100001, 这个地址存放了值10;
int *p = &a; //创建变量p, 给p分配地址0x100002, 这个地址存放的值是"0x100001"(a的逻辑地址值);
int *&q = p; //创建变量q, 给q分配地址也是0x100002, 因此这个地址存放的值还是a的逻辑地址值;
*q = 20; //访问存放在q变量地址下的值, 获得了a的地址值, 再访问一下a的地址值, 修改上面的内容为20;
2017-07-10