C++指针、数组、字符串结论杂记

         

1.在数组做函数形参时,A[][3]表示一个第二维的角标个数是3的一个数组,传入实参B[i][j]时,j=3,而i能满足函数体里的语句的需要即可。


2.A[i][j]做函数形参时,实参B[m][n]的要求是n=j且m>=i。


3.操作系统不检查数组第一维的边界,但检查 二维及二维以上的边界,或大或小均不行。(针对数组作函数实参的情况)


4.声明char *n 之后,可以直接把字符串赋给n,输出的时候输出的是字符串的内容,而非地址。如:
    char *n;
    n="abc";
    cout<<n<<endl;

   此时输出的内容是:abc


5.void类型的指针可以存放地址,但是不能通过void类型的指针去间接访问一个对象,想要访问此对象,需要经过强制类型转换,然后用另一个类型适合的指针去访问。


6.任何指针的值都可以赋给void指针,但除 void之外的指针之间的赋值都要求类型一致


7.对于数组的元素,其书写格式的本质就是“ 地址[元素]”,其中的“地址”不仅可以是数组名,还可以用其它的东西代替(例如指针,当然,得保证地址对应一致)。如举

      例:

      int a0[3]={11,12,13};
      int a1[3]={21,22,23};
      int*p[2];
      p[0]=a0;
      p[1]=a1;
      cout<<p[0][0]<<endl;
      cout<<p[1][1]<<endl;

    输出结果:前者为11,后者为22.对于多维数组,这里拿二维数组b[2][2]中的元素b[0][1]为例,b[0]是地址,[1]为元素。有点类似于子目录。


8.可以把一个具体已知的地址赋给指针,只需经过数据类型转换即可。例如:
      int*p;
      p=(int*)0xaf80;

   注意,类似0018FF44的地址不符合要求,不能直接赋给指针,应该写成0X0018FF44才能   用来通过类型转换后赋给指针。(X大小写均可,无影响。即转换成16进制

   数)(这条结论仅用于解决疑问,开发过程中最好别用)


9.int(*p)[3][4]=new int[2][3][4]的结果是在p中储存了数组首元素的地址,但类型为int[3][4]。


10.“浅拷贝”和“深拷贝”是对含有指针类型数据成员的类所说的。即几个不同对象(浅拷贝得到)的指针类型数据成员指向同一内存。例如,P2由P1浅拷贝而来,那么P1

     的指针类型的数据成员指向的是哪一块内存P2的指针类型的数据成员就指向哪一内存。


11.访问未赋值的指针极有可能导致程序崩溃。(这里的访问是指对内存产生更改的访问)


12.给字符数组赋初值的时候可以将字符和ASCII码混用。

      如:
      char a[20]={a'',98,99,'d',101,0};

      但不能将这两者和整体的字符串常量混用


13.头文件<cstring>里包含了头文件<string.h>。<cstring>除了包含了<string.h>之外,仅仅是#define了      

      量。并没有定义类或函数等等。


14.如果没有包含头文件<string>,那么cout<<string类型对象名;是会报错的。(就算包含了头文件<string.h>也是会出现这种情况的)


15.声明了一个指向一个类的对象的指针后, 就算该指针没有被初始化,也是可以调用该类的公有函数的,但如果该公有函数访问了该类的数据成员(由于指针没被初始化,所 

     以数据成员没被初始化)则会导致程序崩溃,不过编译时不会报错。


16.对于一个三维数组a[2][2][2],其中a、 a[...]、a[...][...]都是指向相应下一级首元素的指针。当然a[...][...][...]就不是指针了。


17.数组的...[a]的意义就是先偏移a然后取*


18.string类的对象的类型据对不是char*类型也就是说strcpy(... , ...)不能传入string的对象。


19.当char*p=0;时cout<<p;在编译和链接时不会报错,但运行时会使程序出错。


20.声明引用之后必须初始化。


21.字符串中的字符从0开始编码,0号位置、1号位置、2号位置····。

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值