zoukankan      html  css  js  c++  java
  • C++程序设计随笔(二)

      指针:

    指针的实现是希望能直接隐射到程序运行所在的机器上的地址机制。

    能过独立的进行分配和通过内部指针类型指向的最小对象就是char。一个bool量最少也要占据char那么大的空间。

     

    在典型情况下0被表示为一个适当大小的全零的二进制的模式。没有任何对象会被分配到地址0,因此0也被做为一个指针文字量,表明一个指针当时没有指向任何对象。

    在c中宏NULL表示0指针,C++建议使用0.或者定义宏const int NULL = 0;

    字符串函数:strlen()就是依靠0来确定字符串结束,就是‘’.

    字符串:

    一个字符串文字量里包含的字符个数比它看起来的字符数多一个,它总是由一个空字符‘’结束。空字符串的值是0.

    例如:

    sizeof("bohr") ;//== 5

    字符串文字量的类型是“适当个数的const字符的数组”,所以“bohr”的类型就是const char[5];

    这就会出错:如

    void f(){
    
      char *p = "Plato";
    
      p[4] = 'e';//这就会出错,因为 定义相当时是const char *p
    
    }
    

    注意::

    例如:(p 、q都是char*)

    if(q == p)

    这里==是比较地址的。

    数组:

    数组不具备自描述性,就是说不能像char[]那样遍历,因为数组不像字符串那样包含一个结束符。就得以某种方式提供它的元素个数。例如:

    void f(){
      int cSize = 7;
      const char c[cSize];
      for(int i = 0;i < cSize;i++){
      use(c[i]);
      }     
    }
    

    const表示常量,直接表达“不变化的值”

    const实际上改变了类型,也就是说,它限制了对象能够使用的方式,并没有描述常量应该如何分配。

    指针和常量

    将一个指针的声明用const“预先固定”,将使那个对象成为常量,而不是这个指针。例如:

    void fl(char *p){
      char s[] = "Gorm";
      const char *pc = s;//指向了s,就是s成了常量
      pc[3] = 'g';//错误:pc是指向了常量,s是常量了
      pc = p;//正确
    }

    char *const cp;//表示指针为常量,指针是指向字符的

    结构体:(struct)

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

    在完整声明被看到struct之前,不能去声明这个结构类型的新对象。

    struct No_good{
      No_good member;//错误:递归定义
    }

    可以将一个名字声明为结构的名字。

    struct List;//声明一个结构的名字,后面定义
    struct Link {
      Link* pre;
      Link * suc;
      List* member_of;
    }
    
    struct List{
      Link* heah;
    }
  • 相关阅读:
    【BZOJ1492】【NOI2007】货币兑换(动态规划,CDQ分治,Splay)
    【CF311E】Biologist(网络流,最小割)
    【BZOJ1391】Order(网络流,最小割)
    【BZOJ2007】【NOI2010】海拔(最小割,平面图转对偶图,最短路)
    【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)
    【BZOJ1458】【洛谷4311】士兵占领(网络流)
    【BZOJ2756】奇怪的游戏(二分,网络流)
    【BZOJ1143】祭祀(网络流)
    【BZOJ3504】危桥(网络流)
    【洛谷3852】小朋友(弦图)
  • 原文地址:https://www.cnblogs.com/a-bird/p/3597522.html
Copyright © 2011-2022 走看看