C++Primer Plus 第四章之复合类型 总结

总结只能让你知道整章大体的内容,帮你节约重复看的时间,但是如果总结内容看完后不清楚,一定要回去再看一遍内容

*********************************************数组***************************************************************
当数组后面为‘\0’时,数组变成字符串
数组同constant(const)一样,只能在定义的时候赋值,数组不能赋给另外一
个数组
har bird[10]="Mr.Chen",后面几个没赋值的自动变为‘\0’(空字符)
数组名为第一个元素的地址

*****************************************数据大小strlen和sizeof**********************************************
int a[10]="asdf"';

b=strlen(a);//答案为4,只计算可见字符,并没有将空字符算进去

c=sizeof(a);//答案为10


sizeof 用于指针时结果是指针长度,用于数组时是数组长度

strlen的应用:
char * animal[10]="fox";
char * ps=new char [strlen(animal)+1];

因为fox占用10个字节明显富余,所以这样能节省一定空间

*********************************输入和输出****************************************************************
cin的缺陷:会识别空格,将空格两边当做两个不同的输入
cin.getline(name,ArSize)用于数组,//char name[ArSize],所以参数为数组名和数组大小,未输入前,该数组无内容


getline(cin,str)用于字符串;不过要与cin.get();相配合。//str为字符串,cin为固定的内容
cin.get():使程序读新输入的一行

如果给cout提供一个祖父的地址,则它从该字符开始打印,直到遇到“\0"
如果指针的类型为char*,则cout将显示指向的字符串
如果要显示字符串的地址,则必须将指针转换为另一种类型,如int*
cout为指针时,输出是指针地址


*******************************字符串**********************************************************
string b="qwer";//两个都是字符串

string c="zxc";

c +=b;//直接将b连接到c的末尾

 

字符串之间的比较  strcmp

Word[10]=”mate”;

Word==”mate”;

这个函数是两个地址的比较,所以肯定是不相等的

Strcmp()的函数接受两个字符串地址作为参数,因此可以是指针,字符串常量或者字符数组名

如果函数相同,函数返回0

如果第一个字符串排在第二个字符串之后,函数返回1

如果第一个字符串排在第二个字符串之前,函数返回0

 

小写字母的编码比大写字母大,所以小写字母在大写字母后,比较时只看第一个字母

 

*******************************************共用体 union******************************************************
数据使用两种或者跟多的格式的时候用
union id
{  long id_num;
   char id_char[20];
} id_val;

**********************************************指针*********************************************************************
将地址视为指定的量,将值视为派生的量,从而产生指针——用于存储值的地址。

*操作符被称为间接值或解除应用操作符,将其运用于指针将得到该地址的值。


long * fellew;
* fellew=2323;
这种写法是错误的,fellew是指针却没有赋值,所以不知道2323会赋值到哪里去

因此有个使用指针的金科玉律:指针使用解除引用操作符时,一定要给指针赋值
一个恰当准确的地址
这样赋值
int *pt;
    
pt = (int *)0xB8000000;

因此,为了方便,我们可以这么搞,关键用new
int * pn = new int;
delete pn;
delete和new一定要搭配着用。
指针的真正用武之地在于,在运行阶段分配未命名的内存以存储值,在这种情况
下只能通过指针来访问内存。上面的用法体现了这一点。


指针指向动态数组
int * psome = new int [10];
delete [ ] psome;
[ ]告诉程序,应该释放整个数组,不仅仅是指针指向的元素

那么怎么用动态数组呢?怎么给它赋值,怎么把里面的数据提取出来?
答:把指针名当作数组名用就可以了。★★★★★

动态数组(指针)±时的数据位置变化★★★
如:p[0]=1,p[1]=2,p[2]=3
p=p+1后,p[0]=2,p[1]=3


****************************************将字符串赋予数组********strcpy**strncpy***********************************

char food[20]="apple";
    strcpy(food,"sdfasdfasdfasdfasdfadsfasdfasdfasdf");
    cout<<food<<endl;

这样apple会被替代,字符串就算超了20个字节也会显示出来,不过会覆盖掉后
面的内存,为避免这个问题,我们要使用strncpy

strncpy这个函数接受第三个参数---赋值最大的字符数
注:如果复制的字符串太长,到数组最后还没复制完,则不会自动加空字符,因
此要有如下操作:
strncpy(food,"sdfasdfasdfasdfasdfadsfasdfasdfasdf",19);
food[19]='\0';


动态******
动态意味着,内存是在运行是分配的,而不是在编译时分配的

用new创建动态结构
步骤:1.创建结构
      2.访问其他成员


要创建类,那么就要要同时使用结构类型和new

创建动态结构:inflatable * ps =new inflatable;
访问成员:
因为这种结构没有名称,只是知道地址,所以无法用'.'来进行访问成员,此时
就要用"->"操作符
ps->price


*******************************************三种存储方式************************************
1.自动存储
2.静态存储
3.动态存储


自动存储:
在函数内部定义的常规变量使用的自动存储空间,被称为自动变量。因此,在函
数调用时产生,函数结束时灭亡。
自动变量是一个局部变量

静态变量:
在整个函数执行期间都存在的存储方式
使变量变为静态的两种方式:
1.在函数外面定义它
2.声明变量时使用关键字:static

动态变量:
动态存储使用的空间为自由存储空间,内存池同静态变量和自动变量的内存是分
开的。数据的生命周期就不完全受程序或者函数的生存时间控制了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值