C++ Primer Plus读书笔记02

 

2012-02-22

1、 结构体中可以指定占特定位数的成员

struct mytest

{       int age:4        //用冒号分隔,则变量age占4字节

        unsigned char a:4              //同上

}

2、 union共用体,当数据项使用多种格式(但不会同时使用时),比struct节省空间

3、 new过程的3步    S1分配内存  S2调用所new对象的构造函数  S3返回对象的引用

4、 int *p1,p2              //创建了一个指针和一个整型变量

5、 几种指针分配策略

int value=6;    int *p_value;  p_value=&value;         //正确

int a=5;    int *p=&a;             //正确

int *p=new int ;      *p=100;         //正确

int *p;      *p=100;  //错误,p没有初始化,可能为任意值,∴100的地址可能为任意值

并且,sizeof(p)==4,sizeof(*p)取决于类型

 

 

int a[5];    sizeof(a)==20;

int *p=new int [5];         sizeof(p)==4;

int *s=a;          sizeof(s)==4;

6、 delete只可以释放new分配的内存,释放数组时 delete [] p;

7、 若p是一个指针,cout<<p将打印p 的地址

特例:若p是char型指针,cout<<p打印字符串,cout<<(int *)p打印地址

8、char a[20]=”test”;   char *ps;              ps=animal      //此时并不复制字符串,只复制地址,两个指针指向同一个内存单元

      ps=new char[strlen(a)+1];   strcpy(ps,a);  //获取副本,此时两个指针指向不同单元

9、对于字符串数组,初始化时可以char a[10]=”test”;

否则不应该用赋值,而用strcpy()或strncpy();

如strcpy(a,”test”);        strncpy(a,”test”,9)//9表示要复制的最大字符数,防止数组比字符串小,越界

10、100个字符串,长度1-79之间,合理存储

       mindset:创建一个数组,包含100个指向char的指针,每个指针长度不固定

       示例:char *name;      name=getname();        delete    []     name;

       char * getname(){

       char temp[80];      cin>>temp;    char *p=new char[strlen(temp)+1];   strcpy(p,temp);

       return p;

       }//返回p而不是返回temp,合理减少了所用空间,比返回temp节省空间

11、++i与i++

       ++i  将i增1,再返回值,效率高

       i++ 先复制一个拷贝,再将其增1,再将复制的拷贝返回,效率低

12、int a=30,50   //a==30,逗号运算符优先级最低,所以先赋值30

       int a=(30,50) //a==50,逗号表达式的值为第二部分的值,所以为50

13、char word[];

       比较word中字符串是不是”test”

       if(word==”test”)           //错,此式子比较2个字符串是否存储在相同地址上,而非内容相同(虽然包含相同的字符串,但不在同一个地址)

       if(strcmp(word,”test”)==0)         //正确

      

       string word;

       if(word==”test”)           //正确,含有string 可以正确比较,而char数组则不行

posted on 2012-04-06 17:36  TheBest  阅读(143)  评论(0编辑  收藏  举报

导航