在前两节的快速学习后,我们已经简单了解了一个写程序的基本步骤,循环语句,分支语句(Switch case),判断语句(if else / if else if)。那么接下来我们来了解在c++中的数组和指针。
接下来我们开始阐述什么是数组
一.数组
数组,数组是类似于一个容器,用来放置数据的一个数组,即有序数对。
结构: 定义一个数组 数据类型 数组 Array【(数组容量大小)】;
比如下面这个图
数组的第一个元素的下标是从0开始的,所以要注意一个访问的位置,比如这个a【6】,你想访问的话就只能访问到a[0]到a[5],是没有a[6]这个元素的,如果强制访问,会得到一个八位数的随机地址;
当然,要想好好的使用数组的元素,就得给元素初始化(所谓的初始化就是给元素赋值),接着下面的代码我们尝试初始化(我们可以聚合初始化,也可以一个一个的赋值给元素)
#include<iostream>
using namespace std;
int main()
{
int a[6]={ 10,20,30,40,50,60 };
for (int i = 0; i < 6; i++) {
cout << "第" << i << "个元素的值为: " << a[i]
<<" "<<"对应a【"<<i<<"】个元素下标" << endl;
}
cout << endl;
return 0;
}
我们直接访问a【6】试试
#include<iostream>
using namespace std;
int main()
{
int a[6]={ 10,20,30,40,50,60 };
for (int i = 0; i < 6; i++) {
cout << "第" << i << "个元素的值为: " << a[i]
<<" "<<"对应a【"<<i<<"】个元素下标" << endl;
}
cout << endl;
cout << "******************" << endl;
cout << "我们访问a[6] a[6]的值为: " << a[6] << endl;
return 0;
}
接下来我们看一下运行结果
我们的到的a[6]是一个带负号的一个随机地址,除此以外,我们的编辑器(IDE)还会提醒我们
所以我们访问的数组要想合法,必须是Array【n】,有效范围是(0~n-1);这便是一维数组,学好了一维数组,在以后学习Vector容器有着很好的帮助。
1.2二维数组
有了学习一维数组的经验,我们把视野放到二维数组,你可以想成一维数组是一个链,二维数组就是由两个链组成(行和列)
比如我们定义一个Array[3][3]
那么如图
A[3][3]就是一个3*3的矩阵,同样的道理,初始化,运用
容易发现,接下来我们求对角线的简单运算,我们以加法为例
我们发现,第一个数是0.0,而最后一个数是2.2,而2是我们数组的大小
我们令数组大小为n,计算0.0加上n.n就是我们对角线的和
接下来我们进行实现(观察物质的本质规律)
#include<iostream>
using namespace std;
int main()
{
int Array[3][3];
int n = 0;
//接着我们给初始化,我们来最不该的办法
Array[0][0] = 10; Array[0][1] = 20; Array[0][2] = 30;
Array[1][0] = 40; Array[1][1] = 50; Array[1][2] = 60;
Array[2][0] = 70; Array[2][1] = 80; Array[2][2] = 90;
cout << "对角线的和为: " << Array[0][0] << " + " << Array[2][2] << " = " <<
Array[0][0] + Array[2][2];
cout << endl;
return 0;
}
运行结果如下
这就是二维数组的简单应用
二.指针
指针和引用是有关系的,指针的符号为*;
下面我们简单进入编写指针的过程
首先我们要明白的是,指针,是指向一个地址!!而不是指向一个数据,若要获得数据,我们需要对指针进行解,或者指向数组的首地址来获得数组的第一个元素
相对应的,如果不考虑内存情况下的其它问题进行解指针,我们需要利用&(引用);
具体我们看一下代码
#include<iostream>
using namespace std;
int main()
{
int* p; //定义一个指针p,定义一个整形变量a并赋值100
int a = 100;
p = &a; //指针p指向了a的地址
cout << *p << endl; //输出p的值
return 0;
}
这是正常的一个赋值,解指针的操作,指针就是为了方便内存的使用。
我们看一下运行结果
如果我们没有解指针,那么将会出现,我们输出的是一个地址,a的地址
#include<iostream>
using namespace std;
int main()
{
int* p;
int a = 100;
p = &a;
cout << p << endl; //仔细观察我们在这一步少了些什么(*)
return 0;
}
结果就变了
这就是指针和引用的简单关系
到后面我们会知道,指针指向的对象能在堆区开辟一个动态空间,大大减少了栈内存的使用,而引用最外层的理解就是代入函数时不用对内存进行拷贝构造,而是直接引用了原来的数据,减少了时间复杂度。
你大可试试,大胆尝试才能孰能生巧!!!加油
你可以了解一下指针数组,看看指针在数组间的移动!