***********************2010年09月03日 星期五 08时22分15秒 (第三天)*********************************** 开始C++!!!!!!!! c++程序运行过程 g++ -c hello.cpp g++ hello.o a.out
g++ hello.cpp o -newname newname
也可以在命令行
g++ hello.cpp; a.out(写在一行) 步骤
编辑器---vi gedit
编译器---g++(其实g++也做了连接) 连接器(linker)----ld 执行----a.out 运行execute
也可以只让g++ 编译 g++ hello.cpp -c 得到目标文件hello.o,然后再做连接g++ hello.o;也可g++ hello.o -o hello;
//预处理:ifndef或include
表预处理输入输出流:#include
cout:输出流(可以自已识别数据类型 ) cin:输入流 endl:换行;
转义字符:\\t (等于tab)
\\r(回退到行首前面输出内容无) \\b(回退一个字符)
把另一个文件插入(任意位置):#include\就会执行另一个文件的内容)(注意没有;里面的内容也是c++语句 )
函数
1970/1/1/0:0::0到现在的秒数:time(NULL)----------------#include
可以直接输出函数cout< 字符的ASCII码从0~127(计算计用8bit表示一个字符,即一个字节) 'A'~'Z' 65~90 'a'~'z' 97~122 '0'~'9' 48~57 ASCII是0:0 ,false,'\\0',NULL 类型 short短整形(-32768~32767)---------------2个字节 int 整数----------------------------------4个字节 unsigned int 表非负整数(0~)----------------4个字节 long长整型--------------------------------4个字节(后缀 L l) char字符(-128~127)---------------------1个字节 unsigned char(0~255)-------------------- 1个字节 string字符串------------------------------4个字节 float单精度小数----------------------------4个字节 (后缀 f) double 双精度小数--------------------------8个字节 (后缀d) long double长双度小数----------------------12个字节 (后缀ld) bool布尔 (布尔值true false)----------------1个字节 注意sizeof(string) 结果4 sizeof(\结果是10,因为有一个'\\0' 相当于strlen()+1 float/double类型如小数位数取决于前面整数部分的大小 负数是用补码表示:-128表示(补码:正数到反再加1)(最高位符号位一定是1) 128->10000000 取反->01111111 再加1->10000000 -1表示 1->00000001 取反>11111110 再加1->11111111 c++中不能直接写二进制表示一个数;(十进制,八进制 0开头,十六进制0x开头) 变量名(见名知义):字母下划线开头,字线数了下划线组成,如学号StudentNumber 关键字:编辑时会变颜色 变量的类型及作用范围 局部变量:在函数内部和复合语句中定义的变量,作用范围只在函数各复合语句中,形参也是局部变量 全局变量:在函数外部定义的变量,作用范围,定义处到本源文件结束 局部变量与全局变量发生命名冲突,在局部变旦的作用范围,局部变量起作用; 定义命名空间 namespace 命名空间名{ 定义变量并初始化; 定义函数; } 使用命名空间中的变量 命名空间名::变量名-----表命名空间中的变量(同名可必免发生命名冲突) 命名空间名::函数名()-----表命名空间中的函数 ::变量名----表全局的变量 使用哪个命名空间要事先声明:using namespace 命名空间名;(std是c++标准命名空间) 也可以using 命名空间名::变量名; 先声明 using 命名空间名::f(); 常量: 定义常量:const double pi; const string myname=\常量的值称字面量 符号常量:#define PI 3.14159 (即以标识符形式出现的常量)(是预处理命令) 算术运算: + - * /:有一个数是float型,则结果是double(因为C++对于float型都按double类型处理) %:两侧均应是整数 /:有一个是负数,则结果是负数 算术运算自动类型提升: bool char shortint --->int(运算必转,即使是两个shortint运算,结果也是int) float ----->double (必转 ) int--->unsigned---->long--->double(两个运算数不同类时转 ) 上面是自动类型转换;还有强制类型转换() 运算符 算术:+ - * / % ++ -- (结合性:后++(自左向右);前++(自右向左)) 关系:> < == >= <= != 逻辑:&& || ! 位运算:<< >> & | ^ ~ 赋值:= += -= *= /= %= >>= <<= &= ^= != 条件:? : 逗号 : , 指针 :* 引用 和地址符:& 求字节符:sizeof() 强制类型转换:(类型) 成员:. 指向成员:-> 下标:[] 其它:() 动态分配空间运算符:new 释放空间运算符:delete 抛出异常运算符:throw (注意:逗号运算符结果是最后一个表达式的值,但多个,结合性自左向右) 优先级 ()[] -> . 单目 算术 关系 逻辑(不包括!) 条件 赋值 逗号 结合性 自右向左:单目运算符(后++例外自左向右) 三目运算符?: 赋值运算符 抛出异常throw 例:int i=123; 输出~i+1 结果是-123(负数等于正数按位取反再加1) 或 int i=123; 输出0-i 结果是-123 (负数等于0-正数) 输出 ~1 结果是0 cout< cout< 记住:非0就是真 !80 输出假0 !0.464674 输出0 记住:输出表达式用括号 cout<<3>5< sizeof(类型) 输出类型所占有的了节数 sizeof(变量/表达式) 分析结果的类型,输出占有多少字节 ********************************************************************************************** 指针知识点一 pointer_1=&a;pointer_2=&b; 若不想改变a,b值,只想改变输出顺序,可用指针改变指向 可int *p; p=pointer_1;pointer_1=pointer_2;pointer_1=p;//完成交换指向,即些时pointer_1=&b,pointer_2=&a, 而a,b值并没有改变。 指针知识点二: pointer_1=&a;pointer_2=&b; 实参(pointer_1,pointer_2) 形参(int *p1,int *p2) 实参到形参之间的传递是单向的值传递,如写成 void swap(int x,int y);xy改变后a,b的值并不会改变 而用指针作为形参与实参,传的是地址,让形参和实参指向同一个地址,形参可直接操作实参所指向地址中的数据。 如操作*p1,*p2,用到中间变量应定义int temp,而不是int *temp;因为temp所指的单元不可预见,如*temp=*p1这样就有可 破坏系统中的数据。 总结:实参变量和形参变量之间的数据传递是单向的“值传递”方式,指针变量作为函数的参数也是单向的值传递,就是形参如改变的是 形参所指向的地址,不会传给实参,即实参的指向没有变;如果形参改变的是形参所指向变量的值,则主函数中变量的值会改变。 ??经典考试题:为什么使用指针做为函数参数 答:因为函数调只可以得到一个返回值,而使用指针变量做为函数参数,可以通过形参指针变量改变主调函数中变量的值,相当于通过 函数调用从被调用的函数中得到多个值。 指向数组元素的指针