数组的定义,一维数组,二维数组与变长数组

目录

1、数组

2、一维数组

3、二维数组

5、数组的大小

6、遍历数组

7、数组常见错误


1、数组

简介:是一种容器

<类型> 变量名称[元素数量] ( c99之前元素数量必须是整数)

int grades[100]; double weight[20]; 元素数量变量必须为整数

[下标]中从零开始数

#include <stdio.h>
​
int main(void)
{
​
    // 数组的大小
    const int number = 10;
    int x;
    // 定义数组
    int count[number];
    int i;
    // 初始化数组
    for (i = 0; i < number; i++)
    {
        count[i] = 0;
    }
    scanf_S("%d" , &x);
    while( x != -1){
        if(x >= 0 && x <= 9){
            // 数组参与运算
            count[x] ++;
        }
        scanf_S("%d" , &x);
    }
    // 遍历数组输出
    for (i = 0; i < number; i++)
    {
        printf("%d:%d\n", i , count[i]);
    }
    return 0;
}

2、一维数组

定义:一维数组,是由数字组成的以单纯的排序结构排列的结构单一的数组,是计算机程序中最基本的数组。

当中每个元素都只带有一个下标时,称这样的数组为一维数组。(如:数组名[常量表达式] )

注:数组作为函数参数时,往往必须再用另一个参数来传入数组的大小

   如下例题:找出key在数组a中的位置
                   key表示要寻找的数字 a要寻找的数组 length数组a的长度
                   如果找到,返回在a中的位置,如果找不到就返回-1

#include<stdio.h>
int search(int key, int a[],int length){
	int ret = -1;
	int i;
	for ( i = 0; i < length; i++)
	{
		if (a[i] == key) {
			ret = i;
			break;
		}
	}
	return ret;
}
int main(void){
	int a[] = { 2,4,6,7,1,3,5,9,11,13,23,14,32, };
	int x;
	int loc;
	printf("请输入一个数字:");
	scanf_s("%d", &x);
	loc = search(x, a, sizeof(a) / sizeof(a[0]));
	if (loc!=-1)
	{
		printf("%d在第%d个位置上\n", x, loc);
	}
	else
	{
		printf("%d不存在\n", x);
	}
	return 0;
	
}

因为如果数组作为函数参数

  •  不能在[ ]中给出数组的大小
  • 不能再利用sizeof来计算数组的元素个数!

3、二维数组

二维及多维数组可以看作是一维数组的多次叠加产生的。(两对[ ] [ ])

数组名[常量表达式][常量表达式]


4、变长数组

变长数组:数组大小待定的数组,C语言中结构体的最后一个元素可以是大小未知的数组,也就是所谓的0长度。

它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。

对于变长数组的这个特点,很容易构造出变成结构体,如缓冲区,数据包等等

5、数组的大小

sizeof给出整个数组所占据的内容大小,单位是字节

sizeof(a)/sizeof(a[0])

sizeof(a[0])给出数组中单个元素的大小,于是相除得到了数组的单元个数

这样,一旦修改数组中初始的数据,就不需要再修改遍历的代码

6、遍历数组

通常使用for循坏。

让循坏变量i从0到<数组的长度,这样循环体内最大的i正好是数组最大的有效下标。

7、数组常见错误

1.循坏结束条件是<=数组长度

2.离开循坏后,继续用i的值来做数组元素的下标!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值