我是靠谱客的博主 寒冷狗,最近开发中收集的这篇文章主要介绍第三章:数组知识点和习题答案以及学习感受,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型。

2、字符数组的特殊性:
字符数组有一种额外的初始化形式,我们可以用字符串字面值对此类数组初始化。当使用这种形式时,一定注意字符串字面值的结尾处还有一个空字符。


例子:char a1[] = {‘C’,‘+’,‘+’};
//列表初始化,没有空字符
a1的维度是3
char a2[] = {'C','+','+',''};
//列表初始化,含有显示的空字符
a2的维度是4
char a3[] = "C++";
//自动添加表示字符串结束的空字符
a3的维度是4
const char a4[6] = "Daniel";
//错误:没有空间可存放空字符
a4是错误的,尽管字符串字面值“Daniel”看起来只有6个字符,但是数组的大小必须至少是7

3、数组阅读的方法:
由于数组的维度是紧跟被命名的名字的,所以就数组而言,阅读的方法由内向外阅读要比从右向左好。


例子1:试着用由内向外阅读的方式分析下面的语句:
int
(*Parray) [10] = &arr;
分析:首先是圆括号括起来的部分,*Parray意味着Parray是个指针,接下来观察右边,可知道Parray是个指向大小为10的数组的指针,最后观察左边,知道数组中包含10个元素。Parray是一个指针,它指向一个int数组,数组中包含10个元素。
例子2:
int (&arrRef)[10] = arr;
分析:(&arrRef)表示arrRef是一个引用,它引用的对象是一个大小为10的数组,数组元素的类型是int
例子3:
int *(&arry)[10]=ptrs;
//arry是数组的引用,该数组含有10个指针。
分析:按照由内向外的顺序阅读,首先知道arry 是一个引用,然后观察右边知道,arry引用的对象是一个大小为10的数组,最后观察左边知道,数组的元素类型是指向int的指针。所以arry就是一个含有10个int型指针的数组的引用。

4、数组的知识点整理:


理解复杂数组的声明(难点)
理解方法:从数组的名字开始,由内向外顺序读取,先左后右,左边为类型。
不可以将数组的内容拷贝给其他数组当作初始值,也不能用数组为其他数组赋值。
int
a[3] = {0,1,3};
int a1[]
= a;
//错误
a2 = a; //错误
复杂数组声明的理解
int *a[10];
//a数组含有10个指针整形
int &a[10];
//错误,不存在引用的数组
int (*a)[10]; //a是一个指针,指向一个含有10个整数的数组
int (&a)[10]; //a是一个引用,引用一个含有10个整数的数组
int *(&a)[10]; // a是数组的引用,数组含有十个指针

5、习题:下列数组中元素的值是什么?


string sa [10];
int ia [10];
int main()
{
string sa2[10];
int
ia2[10];
}
解析:string不是内置的数据类型,int是内置的数据类型。
sa数组为空。
ia数组含有10个整数,皆为0。
sa2数组为空。
ia2数组含有10个整数,在函数体内,值不确定。

6、相比于vector来说,数组有哪些缺点?


解析: 数组的缺点:数组的大小是确定不变的,不可以向数组中添加元素,丧失了vectoer的灵活性。

7、编写一段程序,定义一个含有10个int 的数组,令每个元素的值就是其下标。


#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
for (int i = 0; i < 10; i++)
{
cout << "a[" << i << "]" << " = " << a[i] << endl;
}
}
注意点:下标要从0开始。

8、将7题中刚刚建立的数组拷贝给另外一个数组。利用vector重写程序,实现类似功能。


#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
int b[10];
for (int i = 0; i < 10; i++)
{
cout << "a[" << i << "]" << " = " << a[i] << endl;
b[i] = a[i];
cout << "b[" << i << "]" << " = " << b[i] << endl;
}
}
解析:知识点为(1)关于数组的拷贝,不可以将整个数组赋值给另一个数组,只能逐个元素的拷贝;(2)如果利用vector,可以直接将整个vector拷贝给另一个vector。

vector:重新写程序,


#include <iostream>
#include <string>
#include <vector>
using namespace std;
int
main()
{
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };
vector<int> v1(a, a + 10);//vector的赋值并不可以像数组一样方便的用花括号方便的赋值,这里借用了数组来初始化这个vector
vector<int> v2 = v1;
int b[10];
for (int i = 0; i < 10; i++)
{
cout << "a[" << i << "]" << " = " << a[i] << endl;
b[i] = a[i];
cout << "b[" << i << "]" << " = " << b[i] << endl;
cout << "v1[" << i << "]" << " = " << v1[i] << endl;
cout << "v2[" << i << "]" << " = " << v2[i] << endl;
}
}

最后

以上就是寒冷狗为你收集整理的第三章:数组知识点和习题答案以及学习感受的全部内容,希望文章能够帮你解决第三章:数组知识点和习题答案以及学习感受所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部