C++程序设计 - Week 1 从C走进C++
来源:互联网 发布:网络推广人员提成方案 编辑:程序博客网 时间:2024/05/22 03:32
郭炜 blog 刘家瑛
《新标准C++程序设计教程》,郭炜,清华大学出版社,2012
http://www.cplusplus.com/
edX PekingX: 04831750.1x C++ 程序设计
Coursera 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);
对数组排序,需要知道:数组起始地址,数组元素的个数,每个元素的大小,元素谁在前谁在后的规则。
typedef函数指针用法
Question
《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 = -118 >> 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); // Cswap(&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 &类型的引用,除非进行强制类型转换。
const
1) 定义常量,便于类型检查
const int MAX_VAL = 23;
2) 定义常量指针,不可通过常量指针修改其指向的内容,但指向可以变化
const int *p = &n;
定义常量指针,不能把常量指针赋值给非常量指针,反过来可以
const int *p1;int *p2;p1 = p2; // okp2 = p1; // errorp2 = (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 的全面总结 貌似有错误,看评论
Question
const成员函数?
动态内存分配
用new运算符实现动态内存分配
分配一个变量
T *P = new T;p = new int;
分配一个数组
P = new T[N];
用new动态分配的内存空间,一定要用delete运算符进行释放。
delete 指针;delete []p;
C++二维数组new小结(zz)
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) { }
- C++程序设计 - Week 1 从C走进C++
- cpp -- W1 从C走进C++
- WEEK 7 C
- 第一课、 走进C
- C程序设计(1)
- c程序设计实践-1
- C程序设计实验1
- 1、C/C++程序设计
- c程序设计
- C程序设计
- C程序设计
- C程序设计
- C程序设计
- 《C程序设计》
- C++/C程序设计入门
- C程序设计-C语言概述
- 走进内存,走进汇编指令来看C/C++指针
- 初涉C/C++易走进的误区
- zookeeper 学习记录3 (session,watcher,persit机制)
- 什么是SAP重复性生产
- 解读各种PS图层混合模式的工作原理
- 第十三周项目一动物这样叫(2)
- PHP常用输出语句区别
- C++程序设计 - Week 1 从C走进C++
- 123123
- zookeeper 学习记录4(项目使用几点小结)
- 黎活明给程序员的忠告(转)
- javaScript中的setTimeout用于定时调用某个方法
- Android学习系列(29)--App调试的几个命令实践 bugreport
- 11GRAC CRS启动失败
- iOS 设置button上图下字
- How do I choose grid and block dimensions for CUDA kernels?