赞
踩
《新标准C++程序设计教程》,郭炜,清华大学出版社,2012
edX PekingX: 04831750.1x C++ 程序设计
Coursera 程序设计与算法 Fundamentals of Programming and Algorithms
类型名(*指针变量名)(参数类型1,参数类型2,……);
int (*pf)(int, char);
void qsort(void *base, int nelem, unsigned int width,
int (*pfCompare)(const void*, const void*));
typedef int (*PTRFUN)(int, char);
PTRFUN pf;
int result = (*pf)(n, str);
typedef int (*FP_CALC)(int, int);
FP_CALC calc_func(char op);
//s_calc_func为函数,它的参数是 op,
//返回值为一个拥有两个int参数、返回类型为int的函数指针
int (*s_calc_func(char op)) (int , int);
FP_CALC fp = calc_func(op);
对数组排序,需要知道:数组起始地址,数组元素的个数,每个元素的大小,元素谁在前谁在后的规则。
《C陷阱和缺陷》地址0?
int main(int argc, char *argv[])
& | ^ ~ << >>
按位与:通常用来将某变量中的某些位清零且同时保留其他位不变,也可以用来获取某变量中的某一位。
按位或:通常用来将变量中的某些位置1且保留其他位不变。
按位异或:通常用来将某变量中的某些位取反且保留其他位不变。
a ^ b = c --> c ^ b = a, c ^ a = b
不通过临时变量,交换两个变量的值。(穷举法)
a = a ^ b;
b = b ^ a;
a = a ^ b;
按位非
左移运算符:左移n位,等于乘以2^n。
右移运算符:大多数C/C++编译器规定,如果原符号位为1,则右移时高位就补充1。
-25 >> 4 = -2
-2 >> 4 = -1
18 >> 4 = 1
(a >> n) & 1 // 0 <= n <=31
(a & 1 << n)) >> n // 0 <= n < 31, 符号位的风险
原码, 反码, 补码 详解
Bit Twiddling Hacks 二进制运算的神奇应用
Google Code上面的一个基于浮点数标准的快速算法库,里面也用到了各种二进制运算
类型名 &引用名 = 某变量名;
某个变量的引用,等价于这个变量,相当于该变量的一个别名。定义引用时一定要将其初始化成引用某个变量。初始化后,它就一直引用该变量,不会再引用别的变量了。
引用只能引用变量,不能引用常量和表达式。
void swap(int *a, int *b); // C
swap(&n1, &n2);
void swap(int &a, int &b); // C++
swap(n1, n2);
引用作为函数的返回值(cin,运算符重载)
int n = 4;
int &SetValue() { return n; }
SetValue() = 40;
cout << n;
常引用:不能通过常引用去修改其引用的内容。
const int &r = n;
const T & 和 T &是不同的类型。T &类型的引用或T类型的变量可以用来初始化const T &类型的引用。const T类型的常变量和const T &类型的引用则不能用来初始化T &类型的引用,除非进行强制类型转换。
1) 定义常量,便于类型检查
const int MAX_VAL = 23;
2) 定义常量指针,不可通过常量指针修改其指向的内容,但指向可以变化
const int *p = &n;
定义常量指针,不能把常量指针赋值给非常量指针,反过来可以
const int *p1;
int *p2;
p1 = p2; // ok
p2 = p1; // error
p2 = (int*) p1; // ok,强制类型转换
函数参数为常量指针时,可避免函数内部不小心改变参数指针所指地方的内容。
void MyPrint(const char *p);
strcpy(p, "this"); // 编译出错,strcpy第一个参数char*,类型不匹配,故编译出错
3) 定义常引用,不能通过常引用修改其引用的变量。
非const变量默认为extern。要使const变量能够在其他的文件中访问,必须显式地指定它为extern。在全局作用域声明的const变量是定义该对象的文件的局部变量,此变量只存在于那个文件中,不能被其他文件访问。
int counter;
extern int counter;
extern const int bufsize = 10;
extern const int bufsize;
C/C++中const关键字详解 应该还可以吧,内容有点多,还没看完
关于C++ const 的全面总结 貌似有错误,看评论
const成员函数?
用new运算符实现动态内存分配
分配一个变量
T *P = new T;
p = new int;
分配一个数组
P = new T[N];
用new动态分配的内存空间,一定要用delete运算符进行释放。
delete 指针;
delete []p;
vector
vector<vector<int>> a(row,vector<int>(column));
函数调用是有时间开销的。如果函数本身只有几条语句,执行非常快,而且函数被反复执行很多次,相比之下,调用函数所产生的这个开销就会显得比较大。
为了减少函数调用的开销,引入了内联函数机制。编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。
inline int Max(int a, int b) {
if (a > b) return a;
return b;
}
k = Max(n1, n2);
if (n1 > n2)
tmp = n1;
else
tmp = n2;
k = tmp;
可执行程序的体积会增大。
一个或多个函数,名字相同,然而参数个数或参数类型不相同,这叫做函数的重载。
函数重载使得函数命名变得简单。
编译器根据调用语句中的实参的个数和类型判断应该调用哪个函数。
C++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数就是缺省值。
函数参数可缺省的目的在于提高程序的可扩充性。
如果某个写好的函数要添加新的参数,而原先那些调用该函数的语句,未必需要使用新增的参数,那么为了避免对原先那些函数调用语句的修改,就可以使用缺省参数。
比如画圆,之后加入颜色支持。
void func(int x1, int x2 = 2, int x3 = 3) { }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。