C语言数组

1.数组概念

数组是一组相同元素的集合;数组中存放的是一个或多个数据,但是不能为0(也就是说不能为空集)数组中的数据类型是相同的。

数组分为一维数组和多维数组,多维数组中最常见的为二维数组。

2.一维数组的创建和初始化

数组在创建时可以指定数组的大小和数组的类型

类型可以是char short int long float double

至于名字,根据实际情况,有意义就行。

[ ]中的常量值用来指定数组的大小。

例如

     int arr[20];

    char ch[40];

    double score[10];

数组的初始化分为完全初始化和不完全初始化

int arr1[5]={1,2,3,4,5};这种为完全初始化

int arr2[5]={1};这种为不完全初始化(没有初始化的元素默认为0)

3。一维数组的使用

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

数组元素的下标从0开始依次递增,1,2,3,4....

如果想访问第7个元素,输入arr[7]即可,它的下标为6。

4.一维数组在内存中的存储

#include<stdio.h>
int main()
{
     int i;
     int arr[10]={1,2,3,4,5,6,7,8,9,10};
     for(i=0;i<=10;i++)
       printf("%p\n",&arr[i]);
}

打印出来会发现数组在内存中是连续存放的,地址由低到高,相邻元素之间差4个字节。

5.sizeof计算数组元素个数

#include<stdio.h>
int main()
{
    int arr[10]={0};
    printf("%zd",sizeof(arr));
}

sizeof计算单位是字节,所以上述代码结果为40。

注:sizeof打印时占位符为zd或zu。

#include<stdio.h>
int main()
{
    int arr[10]={0};
    int sz=sizeof(arr)/sizeof(arr[0]);
    printf("%d\n",sz);
}

一个元素四个字节,用总字节数除以一个元素所占字节就是元素的个数。

6.二维数组的创建

int arr[a][b];

a表示行数,b表示列数,int是数组中元素的类型,arr是数组名。

7.二维数组的初始化

不完全初始化:

int arr1[3][5]=[1,2];没有初始化的元素默认为0。

完全初始化

int arr2[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};

按照行初始化

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

注意的是,初始化可以省略行,但不能省略列。

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

int arr5[][5]={1,2,3,4,5,6,7};

上面两种都是对的,但是例如arr6[][]={1,2,3}是错误的。

8.二维数组的使用

C语言规定,二维数组的行是从0开始的,列也是从0开始的。

#include<stdio.h>
int main()
{
   int arr[3][5]={1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
   printf("%d\n",arr[2][4]);
}

此时会打印数字7.

二维数组的输入和输出

#include<stdio.h>
int main()
{
    int arr[3][5]=[1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
         scanf("%d",&arr[i][j]);
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
         printf("%d ",arr[i][j]);
    }
}

9.二维数组在内存中的存储

#include<stdio.h>
int main()
{
   int arr[3][5]={0};
   int i,j;
   for(I=0;i<3;i++)
     {
        for(j=0;j<5;j++)
          printf("%d\n",&arr[i][j]);
     }
}

打印出来可以发现每一行个=的每个元素都是相邻的,地址之间差4个字节,跨行位置处的两个元素也差4个字节,所以二维数组在内存中依然是连续存放的。

10.数组练习

多个字符从两端向中间汇聚

​
#include<stdio.h>
#include<string.h>
int main()
{
   char ch1[]="welcome to bit";
   char ch2[]="##############";
   int left=0;
   int right=strlen(ch1)-1;
   printf("%s\n",ch2);
   while(left<=right)
   {
         ch2[left]=ch1[left];
         ch2[right]=ch1[right];
         left++;
         right++;
         printf("%s\n",ch2);
   }
}
   

​

二分查找

#include<stdio.h>
int main()
{
   int arr[10]={1,2,3,4,5,6,7,8,9,10};
   int left=0;
   int right=sizeof(arr)/sizeof(arr[0])-1;
   int mid;
   int flag=0;
   int i=7;
   while(left<=right)
   {
       mid=(left+right)/2;
      if(arr[mid]>i)
        right=mid-1;
      else if(arr[mid]<i)
         left=mid+1;
      else
         flag=1;
        break;
    }
    if(flag==1)
      printf("找到了\n");
    else
       printf("找不到了\n");
}
     
  

以上是C语言中数组的相关知识和应用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值