总结只能让你知道整章大体的内容,帮你节约重复看的时间,但是如果总结内容看完后不清楚,一定要回去再看一遍内容
*********************************************数组***************************************************************
当数组后面为‘\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
动态变量:
动态存储使用的空间为自由存储空间,内存池同静态变量和自动变量的内存是分
开的。数据的生命周期就不完全受程序或者函数的生存时间控制了