C++primer plus 第二天 第4章 符合类型 指针

4.1 数组

typeName arrayName[arraySize]; 
short months[12];

//初始化
int array[3]={1,2,3};

关键的一点:arraySize绝对不能是变量,可以是常量,也可以是常量表达式(8*sizeof(int))。(注意:const声明的是常量)

常识:C++的数组越界不会报错,会给出异常的值

  1. 不能将一个数组直接赋值给另一个数组
int cards[3]={1,2,3};
int hand[3];
hand = cards;  //这是绝对禁止的
  1. 数组的一部分被初始化,则其他值默认为0
int totals[500]={0};  //其它值默认都是0 了
  1. 求数组大小
int cards[3]={1,2,3};
int len = sizeof cards/sizeof(int);

4.2 C++11新增初始化数组的特性

  1. 可以省略‘=’号
int cards[3] {1,2,3};
  1. 可不在大括号中包含任何东西,这将把所有元素都设置为0
int counts[3] = {};
  1. 列表初始化禁止缩窄转换
long plifs[]={25,2,3.0};// 不允许,因为浮点数3.0转换为long是缩窄操作,非法

4.2 字符串

C++有两种处理字符串的方式

一、原始C-风格字符串

结尾用空字符’\0’结尾的char数组,'\0’的ASCII码为0

char cat[5]={'a','b','c','\0'}; //这就是一个string
cout<<cat;   //只输出"abc"

这种表示太麻烦了,简单写法如下,下面的叫字符串常量

char bird[11]="Mr. Cheeps";   //   \0不用明确写出来

在确定存储字符串所需要的最短数组空间时,别忘了将结尾的空字符计算在内。

注意:字符串常量不能和char相互转换。

char b[]="asd";

char a = "S";  //非法!!! ,且C++中“S”表示的是该字符串存储的地址,也就是指针
a=b;  //不能转换

4.2.3 Cin输入字符串简单探究

cin每次值读取一个单词!!

cin>>name;
cout<<"等待";
cin>>age;
cout<<

//如果用户直接输入一行:zhou is 18 age
//,那name会读取zhou,age会读取is,然后执行后面的代码

cin使用空白(空格、制表符、换行符)来确定字符串的结束位置。

char name[30]={0};
cin.getLine(name,20);  //读取19个字符到name中,剩余一个空间存'\0'

getLine()与get()有很多区别,具体见P80页。 待看

二、C++string类 istream中没有处理string的对象的类方法(借助友元函数)

#include
C++11允许:

char a[]={"sadas dsa"};
string b[]={"rwq"};

//C风格的拼接char []  头文件cstring
strcat(char1,char2)
strcpy(char1,char2)

键盘输入string!!!

string str;
char a[20];

getLine(str);  //读取string的不是类方法!!!
cin.getLine(a);  //是类方法

4.4 结构体

c++允许在声明结构体变量时候省略struct

struct student{
string name;
int age
}
struct student a; //都行
student a;
student a = {“zhou”,12};

C++11结构体初始化

student a{"zhou",12} ;   //允许省略'='
student a{};  //所有值默认为0
  //同样不允许缩窄转化

同时完成结构体定义结构和创建结构变量的工作

struct student{
string name;
int age
} a, b;   //同时创建学生a和学生b

结构体中的位字段
c++允许指定占用特点位数的结构成员,每个成员都被称为位字段

struct student{
unsigned int age : 4 ;  //4bit for age value
bool goodint :1;
}

具体的百度吧

5 共用体 节省一点点内存

union one{
	int a;
	double b;
	char c;
}
one x;
x.a =4;  //此时x是int变量
x.b=2.3; //此时x是double变量
x是什么变量根据其当时存储的数据类型决定,有时候是int,有时候是char.
注意,共用体的长度等于最大成员的长度,上述例子是double的长度

C++枚举

enum bits{first,second=100,third}; //默认first=0,third比前面的大1,为101
enum bits{first,second=0,third}; //first=0  third=1;

7 指针

如果name是一个变量,则&name代表它的地址

int name;
cout<<&name<<endl;

指针的基本使用

int a;
int *p;
p=&a;

cout<<*p; //输出a的值
cout<<p; // 输出a的地址

指针的泄露

创建了一个指针p,分配了指针的空间,但是没有分配指针之后要存储的地址的空间啊!!!

long *p;
*p=123;    // 123存在哪里了未知,非常危险!!!

你可能感兴趣的:(c++,c++,开发语言,数据结构)