【C语言基础】数组—基础知识篇

目录

一、数组的创建

二、一维数组的使用

三、二维数组的使用

四、数组作为函数参数


一、数组的创建

结构:元素类型+数组名称+常量表达式

错误示范: int count=10;

             int arr[count];

#include <stdio.h>

int main()

{

   int arr1[10]={1,2,3};//不完全初始化,剩下的的元素默认初始化为0。

   char arr2[5]={'a','b','c'};

   char arr3[5]="abc";//默认后带\0

   char arr4[]="abc";

   printf("%d\n",sizeof(arr4));//sizeof计算arr4所占空间的大小。

   printf("%d",strlen(arr4));//strlen求字符串的长度——\0之前字符个数。

   return 0; 

}

知识补充:

1.strlen是求字符串长度的,只能针对字符串长度,使用需引头文件。

2.sizeof计算变量,数组,类型的大小,单位是字节,属于操作符。

#include<stdio.h>

int main()

{

    char arr1[]="abc";

    char arr2[]={'a','b','c'};

    printf("%d\n",sizeof(arr1));//4

    printf("%d\n",sizeof(arr2));//3

    printf("%d\n",strlen(arr1));//3

    printf("%d\n",strlen(arr2));//随机值

    return 0;

}

arr1:   a b c \0

arr2:  a b c


二、一维数组的使用

[ ],下标引用操作符。

#include<stdio.h>
int main()
{
    char arr1[]="abcdef";//实际上是[a][b][c][d][e][f][\0]o
    //打印c
    printf("%c\n",arr1[3]);//[ ]里的3是下标
    //打印字符数组abcdef
    int i=0;
    for(i=0;i<6;i++)//或者strlen(arr)
    {
       printf("%c",arr1[i]);
    }
    //打印整形数组(包含计算元素个数)
    int arr2[]={1,2,3,4,5,6,7,8,9,0};
    int sz=sizeof(arr2)/sizeof(arr2[0]);
    printf("\n%d",arr2);
    return 0;
}

三、二维数组的使用

#include<stdio.h>
int main()
{
    //int arr1[3][4]三行四列
    //char arr2[5][6];五行六列
    //int arr1[3][4]={1,2,3,4,5};
    int arr2[3][4]={1,2,3,4,5,6,7,8};
    int i=0;
    for(i=0;i<3;i++)
    {
        int j=0;
        for(j=0;j<4;j++)
        {
            printf("%d ",arr2[i][j]);
         }
         printf("\n");
    }
    return 0;
}

效果如下:

a355d386fa8e46ab925477deed0f5ca8.jpg


四、数组作为函数参数

1.冒泡排序 Bubble sort

① 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

② 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

③ 针对所有的元素重复以上的步骤,除了最后一个。

④ 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

#include<stdio.h>

void bubble_sort(int arr[],int sz)

{

    //确定元素排序趟数

    int i=0;

    for(i=0;i<sz-1;i++)

    {

       //每一趟冒泡排序

       int Sort_correctly=1;//假设这一趟排序正确。!!!

       int j=0;

       for(j=0;j<sz-1-i;j++)  

       {

           if(arr[j]>arr[j+1])

           {

               int tmp=arr[j];//交换

               arr[j]=arr[j+1];

               arr[j+1]=tmp;

               Sort_correctly=0;//这一趟交换不完全有序!!!

            }

       }

       if(Sort_correctly==1)//!!!

       break;//跳出第一个for循环!!!

    }

}

int main()

{

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

    //排成升序。

    int sz=sizeof(arr)/sizeof(arr[0]);//10

    bubble_sort(arr,sz);//冒泡排序函数,转上

    //打印排好序后数组的每一个元素

    int i=0;

    for(i=0;i<sz;i++)

    {

        printf("%d ",arr[i]); 

    }

    return 0;

}

!!! 部分是对代码的优化,能使计算量减少。

例如arr[]={0,1,2,3,4,5,6,7,9,8}优化后就不用从头到尾。

2.数组名

一般情况下,数组名代表受元素地址。

有两种例外:

  • 一sizeof(数组名) 表示整个数组 sizeof计算的是整个数组的大小,单位是字节2。
  • &数组名,数组名代表整个数组。&数组名,取出的是整个数组的地址。
#include<stdio.h>
int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9};
    printf("%p\n",arr);//打印地址。
    printf("%p\n",&arr[0]);//与上部相同
    printf("%d\n",*arr);//解地址,验证为1
    return 0;
}

谢谢光临!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

畅游星辰大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值