• 指针数组结构



    P82

    在字符串里不能有“真正的”换行;

    为了使程序比较整洁,可以将长字符串用空白(换行符、制表符)断开,编译器将拼接起连续的字符串~

    #include <iostream>                                                                                     
    using namespace std;
    int main ( ) {
      /*********************** 错误例子 ***************************/
      char wa[] = "abcd
        efgh
        wxyz";
      cout << wa << endl;
    
      /*********************** 正确例子 ***************************/
      char alpha[] = "abcd"
        "efgh"
        "ijklmn"
        "opqrstuvwxyz";
      cout << alpha << endl;
    }

    P85

    关键字const可以加到一个对象的声明上,将这个对象声明为一个常量。因为不允许赋值,常量在声明时就必须初始化。

    注意:const实际上改变了类型,也就是说,它限制了对象能够使用的方式。

    #include <iostream>
    using namespace std;
    int main ( ) {
      /*********************** 错误例子 ***************************/
      const double pi;
      pi = 3.14;
      cout << pi << endl;
    
      /*********************** 正确例子 ***************************/
      const int maxn = 888;
      cout << maxn << endl;                                                                                 
    }

    P87

    指针常量 与 常量指针 (xx书的shit一样的中文翻译)

    技巧:从右往左读。

      char *const cp;   //cp is a const pointer to char
      char const* pc;   //pc is a pointer to char const                                                     
      const char* pc2;  //pc2 is a pointer to char const

    cp是一个const pointer;

    pc和pc2都是指向char const的普通指针,这两个没有区别。

    下面是书中的一个例子,注释稍加修改:

    void f1(char* p) {
      char s[] = "Gorm";
    
      const char* pc = s;         //pc指向const
      pc[3] = 'g';                //错误:pc是指向的char是常量
      pc = p;                     //ok
    
      char *const cp = s;         //cp是const指针
      cp[3] = 'a';                //ok                                                                      
      cp = p;                     //错误:cp是const
    
      const char *const cpc = s;  //到const的const指针
      cpc[3] = 'a';               //错误:cpc指向const
      cpc = p;                    //错误:cpc本身是const
    }

    可以将一个变量的地址赋给一个指向常量的指针,因为这样做不会造成任何伤害。

    当然,不能将常量的地址赋值给一个未加限制的指针,因为这样做将会允许修改该对象的值了。例如:

    void f4() {
      int a = 1;
      const int c = 2;
      const int* p1 = &c; //ok                                                                              
      const int* p2 = &a; //ok
    
      int* p3 = &c;       //错误:用const int*对int* 进行初始化
      *p3 = 7;            //试图修改c的值
    }

    P88

    一个引用就是某对象的另一个名字。引用的主要用途是为了描述函数的参数和返回值,特别是为了运算符的重载。

    为了确保一个引用总能约束到某个对象,规定必须对引用做初始化

      int ii = 0;
      int& r1 = ii;   //正确
      int& r2;        //错误:没有初始化          

    引用还可以用于定义一些函数,试它们既可以被用在赋值的左边,也可以用在赋值的右边。。(意思是函数的返回值是引用)

    例子:   

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;
    struct Pair {
      string name;
      double val;
    };
    vector<Pair> pairs;
    //维护Pair的一个集合
    //检索s,如果找到就返回其值;否则做一个新Pair并返回默认值0
    double& value(const string& s) {                                                     
      for(int i = 0; i < pairs.size(); ++i )
        if(s == pairs[i].name) return pairs[i].val;
      Pair p = { s, 0 };
      pairs.push_back(p);
      return pairs[pairs.size()-1].val;
    }
    int main ( ) {
      string buf;
      while(cin >> buf) value(buf)++;
      for(vector<Pair>::const_iterator p = pairs.begin(); p != pairs.end(); ++p)
        cout << p->name << ": " << p->val << '
    ';
    }

    P92

    结构体

    数组是相同类型的元素的一个聚集。一个struct则是任意类型元素的一个聚集。

    定义struct类型时,请注意最后的分号。。。

    用于对数组初始化的形式也适用于初始化结构体类型的变量~

    #include <iostream>
    using namespace std;
    struct address {
      char* name;
      int number;
      char* street;
      char* town;
      char state[2];
      int zip;
    };
    int main ( ) {
      address jd = { "Jim Dandy", 61, "South St", "New Provience", { 'N', 'J' }, 7974 };
    } 

     

  • 相关阅读:
    C# 通过反射初探ORM框架的实现原理
    Redis-Nosql数据库入门
    HTTPS 建立连接的详细过程
    Spring面试题
    struts2面试整理
    Java面试基本知识
    Spring MVC面试整理
    Mybatis面试整理
    Sublime 正则替换
    Hiberante知识点梳理
  • 原文地址:https://www.cnblogs.com/Accoral/p/3159914.html
Copyright © 2020-2023  润新知