第四章

1、数组

   sizeof用于整个数组名时将得到整个数组的字节数。

初始化:double earnings[4] {};  //所有的元素都为零

           unsigned int counts[10]={};

           int a[]={1,3,4};

 

2、字符串

 字符串是以空字符结尾的,空字符被些为。

 

  字符串常量:char bird[]=" S";(把S的地址传回去,还多一个)

    字符常量: char shirt_size='S';

 

   拼接字符串时,第一个字符串的尾部将被第二个字符串的字母给填充上。

   strlen()计算可以看见的字符,strlen(name).

 

   cin在读取字符串时,使用空格,制表符和换行符来确定字符串的结束位置,所以当输入the month,则cin不能一次读取,会先读出the,后来再输入时读取month。

  当要读New York时,可以用面向行的,cin.getline(),丢弃换行符,保留,如cin.getline(name,20),读取包含20个字符的name数组。

  get()会保留换行符,所以一般采用  cin.get(name,20);

                                                cin.get();//用于读取输入name后的回车符,将缓冲队列里的回车符清除

                                                cin.get(dessert,20);

cin.get(name,20)调用后会返回一个cin对象,故也可以cin.get(name,20).get();

                                                                        cin.get(dessert,20).get();     getline()也可以这样用,效果一样

 

3、string类简介

  string str="the month";

  cin>>str;

 

string类合并可直接用+;赋值用=;长度用 str.size();

 strcpy(a,b)把b赋值给a    

strcat(a,b)把b加到a的后面  //////  针对的是字符串!!!!

4、结构简介

struct A{

}B; //A是结构体名称,B是这种结构体类型的变量

也可以直接 (struct) A a;进行定义变量

 

结构体初始化inflatable duck (=) {"Daphone " , 0.12 , 9.98};

结构体变量之间也可以用=进行赋值

5、共用体

union one4all

{

int int_val;

long long_val;

double double_val;

};

每次使用只用其中一种数据类型

struct widget

{

char brand[20];

int type;

union

{

long id_num;

char id_char[20];

};

};这是匿名共用体,每次只能在id_num和id_char中选一个用

6、枚举

enum spectrum{red,orange,yellow,green,blue,violet,indigo,ultraviolet};//spectrum是新的类型名

spectrum band  //band 变量的值只能在上述中选择  band=red或band=0

也可以  int band= yellow(取2)

enum bigstep{first,seconf=100,third};

first默认为0,后面没被初始化的枚举量比前面的枚举量大1。因此third值为101.

现在的枚举值可表示枚举的范围,上限是:找到比最大的枚举值大的一个最小的2的幂,将它减一,如最大值是101,则找到128-1=127.

下限:为零或者为负。找负数时,跟正数一样,最后再加上符号。

7、指针和自由存储空间

 &用来获取变量的地址,*称为解除引用运算符,应用于指针,可以得到地址处存储的值。int *p_updates     则p_updates 是地址变量,*p_updates是表示一个值。

int updates=6;                                                                                     int higgens=5;

int *p_updates;                                                                                    int * pt=&higgens;//*pt=5,pt指向的是一个地址

p_updates=&updates;                                                                            因为在声明语句中初始化指针,这种情况下被初始化的是指针,而不是它指向的值,即这里是将pt进行初始化,而不是*pt。

则*p_updates=6,p_updates是一个值

int *pt;

pt=(int *)0xBB8000000;数字要转化为地址类型,加上(int *)进行强制类型转换

在程序运行时用指针分配内存空间

typedef *pointer_name=new typeName;

int *pt=new int;

当用new申请的内存,可以用delete来归还内存,并且delete不能释放变量所获得内存

int *pt=new int; delete pt;//这里只释放了pt指向的内存而没有删除指针pt本身,pt仍然可以重新指向另一个新分配的内存。

int* psome= new int[10];//分配动态数组,psome指向第一个内存块的地址

delete [] psome;//释放动态数组,一定要加[]

psome[0]=2;//可以直接像数组那样访问

8、指针、数组和指针算术

C++允许指针直接与整数进行加减。

关于使用句点运算符与箭头运算符的区别:

 如果结构标识符是结构名,则使用句点运算符;如果标示符是指向结构的指针,则使用箭头运算符。另外一种,如果ps是指向结构的指针,则*ps就是被指向的值--结构本身,则可用(*ps).price。一定要加上括号!

 10、数组替代品

include<vector>

vector<double > vd(n);//n可以是变量,即数组长度不固定

include<array>

array<int , 5> ai;//5是常量

 

原文地址:https://www.cnblogs.com/daocaorenblog/p/4780611.html