C++学习第4章 复合类型

来源:互联网 发布:php文件上传漏洞 编辑:程序博客网 时间:2024/05/16 11:42

知识点:

4.1 数组

1. 如果将sizeof()用于数组,将获得整个数组的字节数。

2. 不能将一个数组赋给另一个数组。

4.2 字符串

1. 字符串常量(双引号)不能和字符常量(单引号)互换。

4.3 string类

1. string类对象可以赋值、拼接和附加。

2. string类具有自动调整大小的功能。

3. c++11新增另一种字符串--原始字符串(Raw),用        "()"        作为定界符,使用前缀R来标识。

eg:    cout<<R"(Jim "King" Tutt uses "\n" instead of endl.)"<<'\n';

4.4 结构简介

1. 结构初始化时,使用逗号分隔值列表  例如  inflatable duck = {“Daphne”,0.12,9.98};

2. c++11 不允许缩窄转换。

4.5 共用体

1. 只能存储 int、long、double

2. 共用体长度为其成员最大长度

4.6 枚举

4.7 指针和自由存储空间

1. 存储数据三属性: 信息地址、值、类型。

2. 声明指针必须指定指向的数据的类型。

3. !一定要在对指针使用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。

4. 如果要将数字作为地址来使用,应通过强制转换将数字转换为合适的地址类型。 int * pt; pt = (int *) 0xB800000;

5. new分配内存是在程序运行时进行的,不是在编译时。int * pnt = new int; 程序员要告诉new需要为哪类数据分配内存;new将找到这样长度的内存块,

并返回该地址。程序员的责任是将该地址赋给一个指针。

不要创建两个指向同一块内存的指针,这将增加 错误的删除同一个内存块两次的 可能性。

int * ps = new int;

int * pq = ps;  // don‘t do this

6. delete 能够将使用完的内存归还给内存池。使用时后面要加上指向内存块的指针(这些内存块是最初用new分配的);

int * ps = new int;

delete ps;   这将释放ps指向的内存,但不会删除指针ps本身,可以将ps重新指向其他的内存块。

一定要配对的使用new 和 delete,否则将发生内存泄漏。

不能尝试释放已经释放的内存块,只能用来释放new分配的内存。不能用delete 释放声明变量所获得的内存。

7. 使用创建动态数组

int *psome = new int [10];  //动态联编_数组是在运行时创建,静态联编_必须在编写程序时指定数组的长度

delete [ ] psome; // 别忘了[ ]

4.8 指针、数组和指针算术

1. 将指针变量加1后,其增加的值等于指向的类型占用的字节数。  *(stacks+1)等价于 stacks[1]  语法糖。

2. 指针名和数组名很相似,数组名常用作第一个元素地址,二者区别之处有一、 指针的值可以修改但是数组名不可以 二、sizeof数组名得到数组长度,而sizeof指针得到的是指针长度(4个字节)

3. 对数组名应用地址运算符&得到的是整个数组的地址,而不是数组里首元素的地址。即 &tell[0] 不等于 &tell。tell+1是地址加单位类型长度,而&tell+1 是以整个数组为单位,跳过整个数组;

4. 如果给cout提供一个字符的地址,则它将从该字符开始打印,直到遇到空字符为止。

5. 如果要显示的是字符串的地址,则必须将这种指针强制转换为另一种指针类型,如 int *

6. strcpy(obj, src); strncpy(obj, src, 最大字符数), 应使用这两个函数,而不是赋值运算符将 字符串 赋给 数组。

7. 使用new创建动态结构   箭头成员运算符 -> ;如果结构标识是结构名,则使用句点运算符,如果标识符是指向结构的指针,则使用箭头运算符。

4.12 复习题

1.   char actor[30]; short betsie[100]; float chuck[13]; long doble dipsea[64];

2.  array<char, 30> actor; array<short, 100> betsie; array<float, 13> chuck; 

3. int a[5] = {1, 3, 5, 7, 9};

4. int even = a[0]+a[4];

5. printf("ideas中的第二个元素为:%f", ideas[1]);

6. char str[13] = "cheeseburger";

7. string str = "waldorf salad";

8. struct fish

{

char kind[20];

int weight;

float length;

}

9. fish fish_a = {“alsdho”, 5, 2.5};

11. double ted; double * pp = &ted; cout << *pp<<endl;

12. float treacle[10] = {1,2,3,4}; float * pp = treacle; cout<<pp[0]<<pp[9]<<endl;

13. 

cin<<n;

int * a = new int [n];

vector<int> a(n);

14. yes. print the string.

15.  fish * pf = new fish; pf->name;

16. 只能读取一个单词,遇到空格就停止。

17.  const int n =10; 

vector<string> str (n);

4.13 编程训练


3. 

#include <iostream>

#include<cstring>


using namespace std;

void main()

{

char f_name[20];

char l_name[20];

cin>>f_name>>endl;

cout<<"Enter your first name:"<<f_name<<endl;

cin>>l_name>>endl;

cout<<"Enter your last name:"<<l_name<<endl;

char *pp = new char[strlen(f_name)+strlen(l_name)+2];

strcpy(pp, f_name);

strcpy(pp, “, ”);

strcat(pp,l_name);

cout<<"Here is the information in a single string:"<<  *pp<<endl;

system("pause");

return 0;

}









0 0