首页 > 技术文章 > C语言之数组

kk657483726 2016-01-14 19:28 原文

1.数组

  基本的数据类型如int double等使用来存储数据的,只能存储一个数据.而数组顾名思义就是用来存储一组数据的.

数组的注意点:

  1.数组的类型一旦确定,那么存储的数据,就必须都是此类型的数据

int array[10]; //只能存储int 类型的数据

   2.数组的长度固定,长度就是存储数据的个数.在我们创建数组的时候,就指定了数组的长度,一旦指定,就无法更改.

  3.严谨数组越界!

2.数组定义格式

数据类型 数组名[元素个数];

int array[3]; // 我们定义了一个int 类型的数组,该数组只能存储3个int 类型的数据.未对数组初始化不能省虑数组的长度

 3.数组在内存存储

int array[3];
//我们定义了一个int 类型的存放3个数据的数组,
//那么我们就再内存空间申请了连续的指定字节数的空间来存储数据(在64位编译器下,int 类型占4个字节)
//系统根据索引(索引从0开始一次递增),来存储数据.
//变量的数据都是以补码的二进制形式存储的,低位存储在低字节,高位存储在高字节.而我们数组名就是索引为0的元素的低字节的地址.(数组名类似与指针,类似而已,但不是指针)

 4.数组的初始化

int array[2] = {1,2};//数组的完全初始化
int arrayOne[2] = {3} //数组的部分初始化,当部分初始化时,系统会默认将未初始化部分赋值为0

 5.数组的遍历

int main(int argc, const char * argv[]) {
    int array[10] = {2,3,1,7,2,5,1,9,7,5};
    int length = sizeof(array) / sizeof(array[0]);//数组的长度就是数组所占字节数/数组元素所占字节数
    for (int i = 0; i < length; i++ )
    {
        printf("%d\n",array[i]);
    }
    return 0;
}

 6,数组与函数

  注意点:1.数组中元素作为函的参数传递时,是值传递.

      2.数组名作为函数的参数传递时,是地址传递(数组名就是第0个元素的低字节的地址),当通过地址传递时,可以修改实参的值(与指针类似)

      3.如果数组名作为函数参数传递时,一定要传入数组的长度.无法通过形参的数组来计算实际数组的长度.

void printfArray(int array[],int length);

int main(int argc, const char * argv[])
{
    int arr[3] = {1, 2, 5};
    int length = sizeof(arr) / sizeof(arr[0]);
    printfArray(arr, length);
    
    return 0;
}
void printfArray(int array[],int length)
{
    for (int i = 0; i < length ; i ++)
    {
        printf("%d\n",array[i]);
    }
}

 7.数组索引的小技巧

技巧1:

    // 要求从键盘输入3个0~9的数字,输出除输入的其他0-9的数字
    int array[10] = {0}; //初始化数组为0
    int num = -1;
    for (int i = 0; i < 3; i ++) {  //  输入3个数字
        printf("请输入第%d个数\n",i + 1);
        scanf("%d",&num);  //以规定死0-9的数字
        array[num] = 1;   //以输入数字为数组索引,若输入一数字,以次数字为索引,将对应索引上得数据赋值为1
    }
    
    for (int j = 0; j < 10; j ++)
    {
        if (array[j] != 1)  //遍历数组,将元素值不为1的索引输出
        {
            printf("%d\n",j);
        }
    }

技巧2:

    // 要求从键盘输入3个0~9的数字,排序后输出
    //0 1 2 3 4 5   索引
    //0 0 2 1 0 0   元素值
    
    int array[10] = {0}; //初始化数组为0
    int num = -1;
    for (int i = 0; i < 3; i ++)
    {
        printf("请输入第%d个数\n",i + 1);
        scanf("%d",&num);
        array[num] += 1;//计数器思想,若输入数字,以次数字为索引,将对应索引上得数值+1;
    }
    for (int i = 0; i < 10; i ++)
    {
        for (int j = 0; j < array[i]; j ++) //重复输入数据的计数器
        {
            printf("%d\n",i);
        }
    }

 

 

 

     

推荐阅读