2012-02-25
1、char ch; cin>>ch; //一次一个字符,忽略空格
cin.get(ch); //不忽略
2、 ctrl+z模拟EOF,读到文件为,则cin.eof()==cin.fail()==true
int count=0; char ch;
cin.get(ch);
while(cin.fail()==false){ cout<<ch; count++; cin.get(ch);}//可一行一行读入,输入ctrl+z结束
3 cin.get(ch)返回cin对象,但istream类中提供了可将istream对象转换为bool值的函数,
当cin出现在if,while语句中时,该函数被调用,如果最后一次读取成功,值为true;
∴while(cin.get(ch))(cout<<ch; ++count;) //与上一句效果一样
4 逻辑运算符<关系运算符,所以if(a>30 && a<80)
关系运算符<算术运算符,所以if(x+4 > y-1)
5、#include<cctype>包含常见字符函数,如isalpha()是字母,ispunct()是标点…
6 条件运算符,c++中唯一一个需要3个操作数的操作符
if a>b c=a else c=b 可以替换为c=a>b?a:b;
7 int m; cin>>m;若读入不合法数据(如string),程序将拒绝继续读取输入
修正办法:S1 重置cin以接受新的输入 S2删除错误输入 S3重新输入
eg
while(!(cin>>m)) //cin>>m,不合法时返回false
{
cin.clear(); //重置cin
while(cin.get()!=’\n’) continue; //删除这一行的错误输入
}
2012-02-29
1、对数组名用sizeof得到数组长度 int a[10]; sizeof(a)==40
int sum(int arr[]) //sizeof(arr)==4 函数参数里的数组实质上是指针
2、当且仅当用于函数头或函数原型是,int *arr与int arr[]的含义才相同
arr[i]==*(arr+i);
3、int fun(const int a[]) //可实现保护数组内容,拒绝修改的功能
4、const使用
int a=5;
int *p=&a |
常规变量地址赋给常规指针 |
const int *q=&a; |
常规变量地址赋给const指针 |
const int a=5; const int *q=&a; |
const变量地址赋给const指针 只此三种 |
int a=5;
const int *p=&a; p指向const int, ∴*p的值为const,对p而言,a是常量,所以*p不可修改,即*p=10错,cin>>*p错
但a实际上是变量,例如a=20(间接修改*p的值)
或者可将新地址赋予p,例如int b=20; p=&b; 正确,但*p=b依然不对
int * const p=&a
则P只能指向a,但允许用P修改a的值
例如,*p=20正确(则a的值变为20),但p=&b错
1、 int findTimes(const char*str,char ch) //查找ch在str中出现了几次
{
int count=0;
while(*str)
{ if(*str==ch) count++;
str++;
}
return count
}
6、函数指针 double (*pf) (int)
声明了一个函数指针,对应函数参数为int,返回值为double
eg.double func(int) ; pf=func(); //则以后可以用pf来取代func
func(5)==pf(5)==(*pf)(5);
7 普通函数:保存地址→跳转到函数部分执行→返回原地址继续执行
内联:将函数相应代码展开,不需跳转,占更多内存;内联函数不能递归
8 C语言通过#define来提供宏 如#define S(X) x*x 尽可能用内联替代宏
9、引用:必须在声明时初始化 int & a; a=b //错误
若int fun(int a),则fun(x+1),fun(5),fun(a[3])等调用均合法
若int fun(int &a),则fun(x+1)会出错
∴用const修饰带引用的参数,如int fun(const int &a),当实参不匹配时(如fun(x+1)),C++在必要时生成临时变量,相当于按值传
10、在结构中使用引用 如struct student{…}
const student & use (student & input)
{ return input }//返回结构的引用,比返回结构效率更高
eg:Student test=use(input)
返回引用:input的内容直接赋给test
返回结构:input被复制到一个临时存储单元中,然后将该单元内容复制给test
错误示例 const string & func(string input)
{ string temp=input; return temp;}//返回一个引用,此语句指向一个函数内声明的变量,在遇到}时temp不再存在
∴在main中调用str=func(input)时崩溃,程序试图医用已经释放的内存