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 条评论
登录 后参与评论

相关文章

来自专栏一英里广度一英寸深度的学习

Python 传值还是传引用

如果 node =None,相当于node指向一个不可变对象,在调用insert函数时,仅传值。

2623
来自专栏大闲人柴毛毛

动态规划法(三)——最长公共子序列

问题描述 给定两个序列,求出它们的最长公共子序列。 如:序列X={a,b,c,b,d,a,b},Y={b,d,c,a,b,a},则X和Y的最长公共子...

3634
来自专栏编程理解

排序算法(九):桶排序

桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中...

1192
来自专栏猿人谷

C++ STL算法系列3---求和:accumulate

 该算法在numeric头文件中定义。 假设vec是一个int型的vector对象,下面的代码: //sum the elements in vec start...

2158
来自专栏WD学习记录

牛客网 数组中的逆序对

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的...

1263
来自专栏数据结构与算法

P1062 数列

题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,...

3027
来自专栏CodingToDie

Python学习(三): 列表(list)和流程控制

第3 章 列表(list)和流程控制 Table of Contents 列表 顺序执行 条件判断 循环 小例子 列表 相信大家在其他语言中都使用过 列表,在 ...

3735
来自专栏机器学习算法工程师

算法题系列之二:求最大子数组之积

题目描述: 给定一个长度为N的整数数组,只允许用乘法,计算任意(N-1)个数的组合中乘积最大的一组。 算法分析: 动态规划的做法,假设数组为a[N],ma...

2826
来自专栏深度学习之tensorflow实战篇

python高阶函数:map(f,[list]),reduce(f,[list],可选初始值),

map,reduce和filter三个函数在python3和python2中发生了较大的差异。具体请看文章后面部分。 1. python的map()函数 ...

3354
来自专栏猿人谷

C语言函数指针基础

本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础。如果你不讨厌事无巨细,请尽情阅读吧。 函数指针虽然在语法上让人有些迷惑,...

39510

扫码关注云+社区

领取腾讯云代金券