C++学习笔记(三)复合数据类型

声明数组语法

数据类型   数组名[数组长度];

访问数组元素

数组名[下标],下标是从0开始的,也就是说数组中的第一个元素是数组名[0]。

在声明数组时初始化数组,例:

Int array[3]={1,2,3};用逗号吧各个值隔开。

只能在定义时对数组进行初始化,之后就不能初始化了,也不能将一个数组直接赋值给另一个数组

int cards[4]={3,4,5,6};//没错

int hand[4];//没错

hand={3,4,5,6};//错误的做法

hand=cards;//错误

如果只对数组中的几个初始化值,则其他默认设置为0

字符串,字符串可能看成一个连续的字符数组,但是字符串有一个结尾符,如下

char string[5]={'a','b','c','d','e'};//这是字符数组,并不能看做一个字符串

char string[5]={'a','b','c','d','\0'};//这是字符数组,也可以看做字符串

如果要用char数组保存字符串,则数组长度必须比字符串的长度大1,最后一位用来储存\0结尾符,不然会出现未知错误。

C++中还可以用string类的对象来储存数组,比char数组要更好操作。

使用string 类要添加#include<string>预编译命令,输入字符串cin>>string对象名,显示字符串cout<<string对象名

连接2个字符串

string str1,str2,str3;

str3=str1+str2;//连接字符串并保存到新的字符串中去

str1+=str2;//str2的字符插入到str1的尾部。

往往普通变量并不能保存现实中的很多数据,比如一个学生的信息,肯定有姓名(字符串),年龄(int),性别(char),这个时候就需要我们自己定义一个新的变量

struct student

{

char name[10];//学生姓名,string name也可以。不过用char得考虑数组是否会越界

int age;//学生年龄

char sex;//学生性别

};

这样我们就有了一个新的变量类型,student型,可以用这个变量类型来保存学生信息

student stu=

{

"张三",

18,

''

};这样就完成了储存学生的信息,当然char是不能保存''的,因为男是国际字符,要使用wchar_t,这里主要是说明这个思想。

注意:声明结构最后在函数外面去声明,不然其作用域只是函数内部。

访问结构其中一个成员时使用点进行访问如果要设置或获得学士的姓名stu.name

共用体union

共用体能储存不同的数据类型,但是只能储存一种数据类型如下面声明:

union oneall

{

int int_val;

double double_val;

long long long_val;

};声明方法和结构相似,但是含义不同

使用共用体时需要确定哪一个成员时活的(他们的地址相同)

枚举:(枚举可以看着是一组常量的集合,比如来表示颜色就可以用枚举)

enum color

{

Red,

Black,

Blue

};在默认情况下,第一个枚举量的值是0,第二个是2,以此类推,当然也可以手动设置其枚举量

Enum color

{

Red=1,

Black

};

指针和自由储存空间

指针用于储存地址(一般是变量、函数的地址),声明一个指针

int a;

int * p;//声明一个指针 *p指向一个Int的值

为指针赋值 p=&a;//(&在这里是取地址符号),p中储存的是变量a的地址,*pa的值,也就是a的地址空间内储存的值

OOP(面向对象编程)经常需要随时分配一块内存块,C++中一般都用new关键字,而这时由于变量名不是确定的,所以一般需要用指针来进行访问。

int * p=new int;//注意:当计算机没有内存时,可能造成无法分配到新的内存,以致返回空指针,还可能引发bad_alloc异常。

当需要一块内存时用new关键

字来请求,所以当使用完了后就得释放内存,以免浪费内存空间:

int * p=new int;

…..

delete p;

这将释放p指向的内存,而不会删除指针p,可以重新为p申请地址。一定要配套的使用new delete,不然可能造成内存泄露。

不要用delete来释放已经释放的内存,这样的结果是不确定的,用delete释放空指针是安全的。

动态数组:

使用new能够创建动态数组,这里的数组长度能够在程序运行时来指定。

int * p=new int[10];

释放空间时,使用delete [] p;

当动态生成的结构时,或通过指针访问结构时,不能用.来访问其成员,应该用->符号访问

使用动态数组时,*p指向第一个元素的值,同时也可以吧p当数组名使用,也就是说访问第一个值可以是p[0].

指针的加减,一个指针加1后,增加的量等于变量的长度,也就是说指向了下一个变量,它还说明了一点,C++把数组名解释成地址。

 

发布了38 篇原创文章 · 获赞 21 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/wantnrun/article/details/8742056