c++入门数组,指针和引用

在前两节的快速学习后,我们已经简单了解了一个写程序的基本步骤,循环语句,分支语句(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;
}

结果就变了

这就是指针和引用的简单关系

到后面我们会知道,指针指向的对象能在堆区开辟一个动态空间,大大减少了栈内存的使用,而引用最外层的理解就是代入函数时不用对内存进行拷贝构造,而是直接引用了原来的数据,减少了时间复杂度。

你大可试试,大胆尝试才能孰能生巧!!!加油

你可以了解一下指针数组,看看指针在数组间的移动!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值