C语言中的数组

用数组可以方便管理多个同类型的数据

定义一个数组的格式是:类型符 数组名[数组中元素的总个数]。如:

int a[5];

上面定义了一个整形数组,数组名称为a,此数组包含a[0]a[1]a[2]a[3]a[4]共有5个整形元素。

给数组元素赋初始值:

int a[5] = {6,7,8,9,10};

这样元素a[0]a[1]a[2]a[3]a[4]的值分别为6,7,8,9,10。

补充:

  1. 数组中的元素在内存中的地址是连续的

    定义5个变量:

    int a = 1,b = 2,c = 3,d = 4,e = 5;
    

    尽管数值上它们是连续的,但是abcde这5个变量在内存中的地址可能并不是连续的。用数组来存储这5个数:

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

    data[0]data[1]data[2]data[3]data[4]它们在内存中的地址就是连续的,而且它们所占的字节大小相同,数据类型也相同。

  2. 给数组赋初始值有以下一些情况:

    • 不初始化

      int a[5];
      

      不给数组中的元素初始值,则所有元素都是垃圾值

    • 不完全初始化

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

      b[0]的值是1,b[1]的值是2,b[2]的值是3,其余元素的值都是0

      因此,可以用下面的语句把数组所有元素的初始值都设成0:

      int c[5] = {0};
      
    • 完全初始化

      在对全部数组元素赋初始值时,由于数据的个数已经确定,因此可以不写数组长度:

      int data[] = {7,8,9,10,11};//data数组的长度为5
      
  3. 一些错误的赋值:

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

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

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

      尽管编译的时候不会报错,但是上述写法是错误的,因为没有a[5]这个元素

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

      语句b = a不能实现把a数组中的值全部复制给b数组,这样写只是把a数组第一个元素的地址赋给b。

      可以用for循环实现把a数组中的值全部复制给b数组:

      for(i=0; i<5; i++)
          b[i] = a[i];
      
  4. 可以用关键词sizeof()求数组的长度(数组有多少个元素)

    int data[5] = {7,8,9,10,11};
    a = sizeof(data);//求的是整个数组data所占用的内存字节数
    //a的值为20。一个int类型在内存中占用4个字节,data数组中一共有5个int类型的元素
    b = sizeof(datap[0]);//求的是data[0]这个数组元素所占用的内存字节数
    //b的值为4
    c = sizeof(data)/sizeof(data[0]);//可以用此方法求数组长度(有多少个元素)
    //c的值为5
    

二维数组

int a[3][4],b[5][10];

上面定义了a为3行4列的数组,b为5行10列的数组

可以把a看做是一个一维数组,它有3个元素:a[0]a[1]a[2],这三个元素各自又是一个包含4个元素的一维数组:

a[0]------a[0][0]、a[0][1]、a[0][2]、a[0][3]
a[1]------a[1][0]、a[1][1]、a[1][2]、a[1][3]
a[2]------a[2][0]、a[2][1]、a[2][2]、a[2][3]
a[3]------a[3][0]、a[3][1]、a[3][2]、a[3][3]

给二维数组赋初始值:

int arr[2][3] = {1,2,3,4,5,6};
int arr2[2][3] = {{111,222,333},{777,888,999}};
int arr3[2][3] = {
            {1,2,3},
            {4,5,6}
            };

打印二维数组:

for(int i=0; i<2; i++)
{
    for(int j=0; j<3; j++)
    {
        printf("%d",arr[i][j]);
    }
    putchar("\n");
}

二维数组补充

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

    只对各行第一列的元素赋初始值,其余元素为0:

    1 0 0 0

    5 0 0 0

    9 0 0 0

  2. int a[3][4]={{1},{0,6},{0,0,11}};

    1 0 0 0

    0 6 0 0

    0 0 11 0

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

    1 0 0 0

    5 6 0 0

    0 0 0 0

  4. 如果对全部元素都赋初值,则定义数组时对第1维的长度(就是第一个中括号)可以省略,但第二维的长度不能省:

    int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

小例子

例一:倒置数组data[5]={1,2,3,4,5,6,7}

#include <stdio.h>
int main()
{
	int data[] = {1,2,3,4,5,6,7};
	int i = 0;
	int j = sizeof(data)/sizeof(data[0])-1;
	int temp = 0;
	while(i<j)
	{
		temp = data[i];
		data[i] = data[j];
		data[j] = temp;
		i++;
		j--;
	}
	for(i=0,j=sizeof(data)/sizeof(data[0]); i<j; i++)
	{
		printf("%d  ",data[i]);
	}
}

例二:在二维数组data[3][4] = {{124,5,6},{3,62,4362},{35,76,7}}中找最大值,并告知下标

#include <stdio.h>
int main(void)
{
	int data[3][4] = {{124,5,6},{3,62,4362},{35,76,7}};
	int temp = data[0][0];
	int row = 0;
	int colume = 0;
	for(int i=0; i<3; i++)
	{
		for(int j=0; j<4; j++)
		{
			if(data[i][j]>temp)
			{
				temp = data[i][j];
				row = i;
				colume = j;
			}
		}
	}
	printf("data中最大的元素是data[%d][%d],它的值是:%d",row,colume,temp);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值