C程序设计 数组

文章详细介绍了数组的作用,如存储大量同类型数据,以及一维和二维数组的定义和初始化方法。它强调了数组名代表内存地址,而不是元素名,并给出了数组赋值、初始化、操作的示例,包括错误用法和正确做法。此外,还提及了多维数组的概念。
摘要由CSDN通过智能技术生成

数组

1.为什么需要数组

了解决大量同类型数据的存储和使用问题

为了模拟现实世界

2.数组的分类

一维数组

怎样定义一维数组

个变量连续分配存储壁间

所有的变量数据类型必须相同

所有变量所占的字节大小必须相等

例子:

int a[5];

维数组名不代表数组中所有的元素,

维数组名代表数组第 个元素的地址

当我们定义一个数组a 时,编译器根据指定的元素个数和元素的

类型分配确定大小(元素类型大小*元素个数)的一块内存,并

把这块内存的名字命名为a。名字a 一旦与这块内存匹配就不能

被改变。a[0] a[1]等为a 的元素,但并非元素的名字。数组的每

一个元素都是没有名字的。

有关一维数组的操作

初始化

字符数组的初始化

char word[] = {'a', 'b', 'c'};

字符串数组的初始化

方式一:char word[] = {"abc"};

方式二:char word[] = "abc";

完全初始化int a[5] = {1, 2, 3, 4, 5} ;

不完全初始化,未被初始化的元素自动为0

int a[5] = {1, 2, 3};

不初始化,所有元素是垃圾值

int a[5];

清零

int a[5]= {0};

错误写法

int a [5];

a[5]= {1, 2, 3, 4, 5} ; / /错误

只有在定义数组的同 才可以整体赋值,

其他情况下整体赋值都是错误的

a[5]只是元素,并不是这个 元素名,数组的每个元素 都是没有名字的。而且int a[5] 并没有元素a[5]其最大 为a[4]。

int a [ 5 ]= {1, 2, 3, 4, 5} ;

a [ 5 ]= 100 ; //error 困为没有a[5 ]这个元素,最大具有 a[4]

int a [5 ] = {1, 2, 3, 4, 5} ;

int b [ 5 ] ;

如果要把 中的值全部复制给 数组

错误的 写法

b = a;  / / error

正确的写法

for (i=0; i < 5 ; ++i)

b [i]  = a [i];

数组常遇见的问题

赋值

排序

求最大/小值

倒置

查找

插入

删除

二维数组

int a [3] [4] ;

总共是12个元素,可以当做 待,这12个元素的名字依次是

a [0] [0]      a [0] [IJ    a [0] [2]    a [0] [3]

a [I ] [0]      a [I] [I]      a [I] [2]    a [I] [3]

a [2] [0]      a [2] [I]     a [2] [2]   a [2] [3]

a [i ]   表示第i+1行第j+1 列的元素

int a[m] [n]    该二维数组 角位 的元素只能 是[m- 1] [n- l]

初始化

int a[3] [4] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12} ;
int a[3] [4] = {
                      {1 , 2 , 3 , 4} ,
                      {5 , 6 , 7 , 8 },
                      {9 , 10 , 11 , 12}
操作
输出二维数组内容:
int a[3][4] = {
                     {1 , 2 , 3 , 4} ,
                     { 5 , 6 , 7 , 8} ,
                    {9 , 10 , 11 , 12} ;
        int i , j;

//输出数组内容

for (i=O; i<3; ++i)

  {

     for (j=O; j<4; ++j)

     printf( "%d  ",a[ i ] [ j ] ) ;

printf("\n");

}

二维数组3行4列输出

int a[3][4] = { {1, 2, 3, 4},

                    {1, 2, 3, 4},

                    {1, 2, 3, 4}};

int i, j;

for(i=0; i<3; i++)

{

for(j=0; j<4; j++)

{

printf("a[%d][%d] = %d ", i, j, a[i][j]);//每四个一行

}

printf("\n");//换行

}

对二维数组排序

求每一行的最大值

判断矩阵是否对称

矩阵的相乘

多维数组

是否存在多维数组

不存在

因为内存是线性一维的

维数组可以当做每个元素是n-1 维数组的 维数组

比如:

          int a[3] [4];

            该数组是含有 3个元素的一维数组

            只不过每个元素都可以再分成 4个小元素

           int a [3][4][5];

            该数组是含有 个元素的一维数组

            只不过每个元素都是 列的 维数组

调换顺序

如何输二维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔跑的小迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值