• C++ Primer Plus读书笔记04


    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)时崩溃,程序试图医用已经释放的内存

  • 相关阅读:
    centos下卸载rpm包
    centos下添加环境变量和启动apache
    centos(linux) 下如何查看端口占用情况及杀死进程
    如何使上层的div遮住的链接可以点击
    jquery.blockUI.2.31.js 弹出层项目介绍
    fieldset、legend、display html元素
    <a>标签中href="javascript:;"的意思
    memcache 学习笔记
    sublime text3 JS语法检测插件
    Apache Rewrite的主要功能
  • 原文地址:https://www.cnblogs.com/yangtianxing/p/2435011.html
Copyright © 2020-2023  润新知