数组入门

引子

关于程序员有一个这样梗,他们喜欢从0开始计数,也许这个梗是因为数组的缘故吧

float eg的值eg[0]eg[1]eg[2]eg[3]eg[4]eg[5]
各项的值1.51.26.556.434.45.6
空间地址AA+1A+2A+3A+4A+5

上图 是一组已经申请好空间并赋好值的浮点型变量,由图可知,下标由0开始计数,需要知道的是数组在内存空间是连续存放

连续存放有个好处是指针A与数组的配套使用,可以对数组各元素的地址,进行函数间的地址传递。


1、定义一个数组


类型 名字[大小];
eg1常见的方式:

int a[10];
float b[12];
double c[3];

eg2:也可以用宏定义

define N 10;
int a[N];

eg3:很少见(只适用C99,慎用)

C语言中,直到C99标准出现之前,声明数组时在方括号内只能使用整数常量表达式。而C99做了很大改进,允许数组的[ ]中的值是整形变量或是整形表达式。这就解释了下面的情况

int n;
scanf ("%d", &n);
int array[n];

虽然n确实是需要运行时动态确定的变量,但是在C99中,以这种变量作为数组大小的形式已经是允许的了。这样的数组就被称之为“变长数组”。
注意:变长数组是指用整型变量或表达式声明或定义的数组,而不是说数组的长度会随时变化,变长数组在其生存期内的长度同样是固定的。
——来自百度百科:变长数组

eg3 打破了一般人对数组的认识,对新手而言掌握eg1、eg2就够了,知道定义一个数组大小时输入一个常量就足够了。

2、数组赋值

eg1:新手最容易接受的做法

int i;
f;oat a[10];

for(i=0;i<10;i++)
    scanf("%f",&a[i]);

eg2:进阶玩法

int a[10] = {43,2,4,23,12,5,4,34,2,1};

/*也可以直接省略括号中的数字,让编译器自动匹配大小*/
int a[] = {43,2,4,23,12,5,4,34,2,1}

此时数组值及空间如下

数组元素a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
数组元素值43242312543421

eg3:高阶玩法
任性的赋值也可以

int a[10] = {43,2,4,23,12,0,0,0,0,0};
/*也可以这样子*/
int a[10] = {43,2,4,23,12}//未赋值的元素自动添0

此时数组值及空间如下

数组元素a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
数组元素值4324231200000

对初学者而言不必过于关注高阶玩法,C99可以指定初始化项目,这里不做过多解释

三、实际应用

来一个简单选择法排序,建议在了解原理的基础上自己动手重构代码
简单选择排序一句话概括:每次选择无序数列中最小(大)的将其放在有序数列的最后(前)。

/* Note:Your choice is C IDE */
#include "stdio.h"
#define N 8
void main()
{
    int a[N]={34,23,6243,123,32,41,412,43};
    int i,j=0,k=0,tmp;  

    for (i=0;i<N-1;i++)  
    {  
        k=i;  
        for(j=i+1;j<N;j++)  
        {  
            if(a[k]>a[j])  
            {  
               k=j;  
            }  
        }  
        if (k!=i)        // 找到一个max,并插入,。。
        {  
           tmp=a[k];  
           a[k]=a[i];  
           a[i]=tmp;  
        }  
    }  
    for(i=0;i<N;i++)
    printf("%d   ",a[i]);
}

小结
1、初步认识数组
2、将数组应用于一些简单的算法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值