下学期开学也有段时间了,已经上了数周的程序设计课了,也学到了不少C++的知识点和学识。
首先我们学习了符合类型。
复合类型是指基于其他类型定义的类型。接下来介绍c++复合类型中的两种:应用和指针, 是基于整形和浮点型创建的。影响最为深远的复合类型是类。
***一,数组***
1.数组只有在定义时候才能使用初始化,不能将一个数组赋给另一个数组。
2.数组名[下标],下标是从0开始的,也就是说数组中的第一个元素是数组名[0]。
在声明数组时初始化数组,例:
Int array[3]={1,2,3};用逗号吧各个值隔开。
3.如果只对数组中的几个初始化值,则其他默认设置为0
难点:
char a[ ]={‘a’,‘b’,‘c’,‘d’,‘e’};//必须是char 类型的 字符串
strlen(a);//计算可见字符串个数
***二,字符串***
1.字符串可能看成一个连续的字符数组,但是字符串有一个结尾符,如下
char string[5]={‘a’,‘b’,‘c’,‘d’,‘e’};//这是字符数组,并不能看做一个字符串
char string[5]={‘a’,‘b’,‘c’,‘d’,’\0’};//这是字符数组,也可以看做字符串
如果要用char数组保存字符串,则数组长度必须比字符串的长度大1,最后一位用来储存\0结尾符,不然会出现未知错误。
2,字符串输入:面向行输入getline()
char a[20]; //必须为char类型的 字符数组
cin.getline(a,20);//将用户输入的字符 读入到一个包含20个元素的 a数组中。
cout<<strlen(a);//输出输入字符个数
如果输入的字符多于19个(1个’\0’),geline仅仅取前19个字符。而多于的不会留在输入队列中(区别与get())
3,字符串输入:面向行输入get()
char a[2];
char b[2];
cin.get(a,2);
cin.get(b,2);
cout<<strlen(a)<<endl;
cout<<strlen(b)<<endl;
输入:abcd
输出:1 1 如果是getline()则输出:1 0
get()取的是n-1个可见字符,数组声明为 n 则读取n-1字符,最后一个设置为'\0';遇到换行符则将其留在输入队列。
第二次调用cin.get()读取第一个字符为 换行符。
难点:
两个cin 为何只允许输入一次??
char a[5];
cin.get(a,5);
cin.get(); //读取输入队列中换行符并丢弃。防止下次读换行符时认为结束而终止。造成第二次不能输入
cout<<a[1]<<endl;
char b[5];
cin.get(b,5);
cout<<b[0]<<endl;
***三,string类型***
1,连接两个字符串
string str1,str2,str3;
str3=str1+str2;
/上面是C++做法,下面是C语言做法/
strcpy(str3,str1);//将str1复制到str3中
strcat(str3,str2);//将str2添加到str1中
2,未被初始化的字符数组,第一个空字符出现的位置是随机的。
char a[10];
cout<<strlen(a);
输出 4 //0-9 随机
***四,结构类型***
1,struct 用法
struct node
{
int data;
node *next;
}p1;//声明结构类型的变量
2,指针和自由存储空间
1)用法: int a=6;
int *p;// ‘p’ 表示存储在p地址处的值
p=&a;//指针为p,存储的是值的地址,而不是值本身。
或者写为:int p=&a;//将指针 p的值设置为&a 而不是将 *p的值
2)指针的危险
long * length;
*length=25365;//length 确实是一个指针,但是没有说明指向哪里,原因是没有初始化指针length
3) new/delete申请与释放内存
int * pn=new int ;//分配int型内存,然后把该内存块地址赋值给指针
*pn=100;//给声明的内存单元赋值
delete pn;//释放pn指向的内存单元,不会删除pn指针本身(pn可以指向另一个新分配的内存块)
***五,指针、数组和指针算术***
1,double a[3]={100,200,300};
double *p=a;//p指针指向的是数组a的第一个元素的地址
cout<<"地址为:"<<p+1<<"存储的值为:"<<*(p+1)<<endl;//输出的是a[1]的地址和a[1]的值
说明:p+1 增加的量等于 p指针指向类型的字节数(double 8字节) C++将数组名解释为数组第一个元素的地址
2,sizeof作用于 数组显示数组占用的字节数,作用于
指针显示指针长度
最后学的最新的知识是函数,是在主函数外定义的一种函数,要学会在主函数外定义具有各种功能的函数,然后在需要时将其调用。这样写出来的程序,可以让主函数看着不那么臃肿,也不用将一个功能在主函数中反复定义,直接调用会方便很多。
***六,函数***
(1)函数定义:
由返回类型、函数名、参数列表、函数体构成。如下:
返回类型 函数名(参数列表){
函数体;
};
(2)函数调用:
函数名(实参列表)
函数定义中的参数被称为形参。而调用函数时提供的具体的数据成为实参。
注意:
①实参的类型一定要与相应的形参类型相匹配。
②如果定义函数为void类型函数,无返回值。否则一定要有return返回值。
(3)函数声明:
由函数返回类型、函数名和形参列表构成。
注意:
①函数使用前必须说明。
②一个函数可以在程序中多次声明,但函数只能在程序中定义一次。
(4)递归函数:直接或间接调。