专栏首页逆向技术C语言第六讲,数组

C语言第六讲,数组

          C语言第六讲,数组

一丶什么是数组

数组,就是一整块的连续内存空间.

且类型都是一样的.大小一样

比如:

1.1数组元素的访问

我们要访问数组,例如上面,我们访问元算2,元素3等等怎么访问..

比如有一个数组为:

int Arry[3] = {1,2,3};   //数组定义初始化.
Arry[0] = 1;
Arry[1] = 2;                 //数组的访问
......        

利用下标来进行访问.

利用程序来进行访问

   int Ary[10] = { 0 };
    for (int i = 0; i < 10; i++)
    {
        printf("%d\r\n",i);
    }

动态的大小识别.

  int Ary[10] = { 0 };
    for (int i = 0; i < sizeof(Ary)/sizeof(Ary[0]); i++)
    {
        printf("%d\r\n",i);
    }

这里用到了一个关键字,Sizeof, sizeof关键字是求大小的关键字. 例如我们求数组的总大小. 然后 利用总大小 除以数组元素个数的大小. 就得出来了数组的个数.

1.2一维数组的声明

在C语言中,或者C++语言中,我们要声明数组. 不用考虑在哪里开辟,开辟多大的问题,只需要你给我一个大小.我编译器自动的来进行开辟内存空间供你使用.

类型 数组名[数组元素的个数]
例如:
    int Ary[3];   //定义一个Ary的数组,有3个元素.

注意,声明的时候是个数.也就是说数组有3个元素.  但是访问的时候是下表.从0开始访问

例如:

ary[0] = 1;
ary[1] = 2;
ary[2] = 3;

总共有三个.

声明的时候则是告诉编译器, 我声明的类型是 int类型,数组名字数Ary,个数是3个. 那么这个数组所占的内存空间则是  3 * 4 = 12个字节大小.

公式计算:

  3(数组元素个数) * 类型  = 内存空间所占大小.

1.3数组应该注意的问题.

在C语言中,数组的声明不支持动态声明.

什么意思?

  也就是说,你需要给定我个数.我来进行申请.但是你不能把这个个数给一个变量保存.让我跟随变量来申请.

例如:

int nCount = 10;
int Ary[nCount];  //错误的

数组的定义可以和普通成员变量的定义放在一起.

例如:

int A, ary[5],b;

二丶数组初始化

上面我们虽然定义了数组.但是并没有仔细讲解数组的初始化

数组的初始化常用的有三种.

第一种, 大括号初始化.

int Ary[3] = { 1, 2 ,3}; //数组中的元素1,元素2,元素三分别初始化为了1,2,3

第二种.全部初始化.

int Ary[3] = {0}; //数组的每个元素全部初始化为了0

第三种,不确定个数的初始化.

int Ary[] = { 1, 2, 3} ;//有的时候你并不知道你的数组有多大. 但是又不用动态的申请空间.
所以这样写会默认有3个元素. 

 三丶二维数组和高维数组

有的时候一维数组并不能满足我们的需求.

这个是否就需要更高维的数组了.

例如:

int Ary[2][2];  定义二维数组

这样则声明了一个二维数组. 代表我们申请了 2行 2列的数组. 大小是 2*2的矩阵.  

这几个元素分别是:

Ary[0][0] Ary[0][1]
Ary[1][0] Ary[1][1]

二维数组的定义初始化.

int nNum[2][2] = {{0,1},{2,3}}; 使用两个括号即可.

二维数组对部分元素进行初始化.

int nNum[2][2] = {{1},{0}};

二维数组的访问

二维数组本质是一维数组.但是为了理解.所以说成是二维数组.

我们利用程序来对其进行访问.

二维数组初始化

    int Ary[3][4] = {0};
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            Ary[i][j] = i + j; //重要语句. i是行,j是列
        }
    }
二维数组输出
    for (int i = 0; i < 3; i++ )
    {
        for (int j = 0; j < 4; j++)
        {
            printf(" %d", Ary[i][j]);
        }
        puts("\r\n");
    }

输出结果.

高维数组则一样,不过一般用不到高维数组.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java开发知识之Java数组

      首先,不管是Java 还是 C++ 还是其它语言.都有数组. (有可能叫法不同) 数组简而言之就是存储一段连续相同数据类型的数据结构

    IBinary
  • 逆向知识十三讲,汇编中数组的表现形式,以及还原数组

                逆向知识十三讲,汇编中数组的表现形式,以及还原数组 讲解数组之前,要了解数组的特性 1.数据具有连续性 2.数据类型相同 比如:   i...

    IBinary
  • 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.

          32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 ? 标号1: 反汇编窗口 (显示代码的地...

    IBinary
  • topK总结(初稿)

    问题1 在n个有序数组中,求topK 假定有20个有序数组,每个数组有500个数字,降序排列,数字类型32位uint数值,现在需要取出这10000个数字中最大的...

    程序员小王
  • Java基础——数组

    (1)数组元素的类型是唯一的,一个数组只能存储一种数据类型的数据。 (2)数组的长度是固定的,一旦数组初始化完成,数组所占有的内存空间将被固定。数组长度不可以...

    羊羽shine
  • js算法初窥02(排序算法02-归并、快速以及堆排序)

    zaking
  • php Array数组知识总结

    PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量...

    benny
  • [Leetcode][二分查找]相关题目汇总/分析/总结

    后端技术漫谈
  • 语言小知识-Java HashMap类 深度解析

    HashMap 也是比较常用的 Java 集合框架类,该类涉及到的知识比较多,包括数组、链表、红黑树等等,还有一些高效巧妙的计算,并且这个类经过几个版本的改进,...

    Wizey
  • 将数据中心迁移到云时易犯的10个错误

    从前不久的数据来看,虽然25%的企业还在评估云服务是否可以在日常生产环境中为他们工作,以及他们的公司数据在云中是否安全。 但是,对于云服务提供商存储和保护关键业...

    静一

扫码关注云+社区

领取腾讯云代金券