进击的KFC:第四节:C语言:一维数组

学习一个新的知识,总是从它的定义,到它的声明,再到它的使用.

1.1数组定义  :  是保存多个相同数据类型的多个数据  ,数组 相当于一个容器

1.2    数组声明: 数据类型 数组名[常量表达式(表示你有几个初值,即元素的个数)] = {初值1,初值2.....};

需求:声明一个数组,用来保存年龄     int age[ 3 ]  = {24, 12, 22};

 1.3 取出数组中的数据    使用  数组名[下标]  ,切记下标从 0 开始

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

       // 遍历,输出所有值

        for(int i = 0;i < 3;i++){

          // 修改数据

         if(i = 2){

             a[i] = 20; 

           }

         printf("%d \n ",a[i]);

一些小体普斯:(1)如果声明数组时,数组元素的个数 > 给出的初值的个数  ,  系统  会 自动 用0 补齐  int  a[ 5] = {1,2,3,4 };  等于  int a[5] = {1,2,3,4,0}; 

                  (2)如果声明时没有给出元素的个数,那么初值有几个元素,那么数组就有几个元素      int a[ ] = {1,2,3,45,};

                  (3)系统不会提示系统越界 ,需要自己注意 ,切记 : 不要数组 越界

                  (4)数组在内存当中,是一段连续的存储区域; 数组名相当于一个数组开始的首地址(也是第一个元素的地址)

                       注意:数组不能直接赋值 , array1 = array2  是错误的 .  数组的名字是 元素的首地址 ,地址 是一个常量 ,而常量是在程序执行期间不能被改变的量,所以数组不能直接                        被赋值

1.4 经典例题

    //  冒泡排序

    //  精髓: 前后比较大小,如果前面大于后面 两个数交换wizhi 一次继续

    //  比较趟数 : 数组元素个数 - 1;

    // 每趟比较的个数: 元素个数 - 1 - i;

    // sizeof(a) / size(int)   求出 数组的元素个数 = 数组a的所占字节数 / int 类型 所占字节数

    int array[ 7] = {9,3,5,1,7,8,4};

    for(int i = 0;i < sizeof(a) / sizeof(int) - 1;i++){

       for(int j = 0;j < 7 - i - 1;j++){

             // 比较过程

              if(array[j] > array[j + 1]){

                   int temp = array[j + 1];

                   array[j + 1] = array[j];

                   array[j] = temp;

              }

       }

}

// 排序

printf("排序后:\n");

 for(int k = 0; k < 7;k++){

     printf("%d ",array[k]);

}


  1.5  声明一个字符型的数组 (有两种形式)

        // 普通的字符数组形式

        char s[ ]= {'i','p','h','o','n','e'};

        // 字符串形式

        char str[ ]= "iphone";

       两种形式的区别:字符串比字符数组多一个'\0'; 字符串是字符数组,但字符数组不一定是字符串

       char str1[ ]={'i','p','h','o','n','e'};

        char str2[ ] = "iphone";

       // 打印数据类型和变量 的 所占字节数的函数  sizeof

      // 占位符 用%lu 无符号长整形

        printf("%lu",sizeof(str1) );  // 6个字节

         printf("%lu",sizeof(str2));  // 7个字节,多一个'\0',要算进去

字符串的四个数:

  (1) 计算字符串的长度  strlen 

      // 打印的是有效长度,不算'\0'在内 . 从第一个字符开始,如果不是'\0' 长度开始加1,直到遇到'\0'结束.也就是说strlen求字符数组长度,因为字符数组没有'\0'

      printf("%lu",strlen(str));

      (2)字符串的拷贝  strcpy(目标字符串,源字符串)

        // 拷贝:从第一个字符开始拷贝 遇到 '\0'结束

       // 注意:目标字符串的长度最好大于源字符串

        char str [20] = {0};

        char str1[] = "FUCK U";

         strcpy = (str,str1);

        // 打印字符串 用占位符%s 一个字符一个字符输出,如果遇到'\0'结束     

         printf("%s\n",str);


         (3) 字符串的拼接  strcat(str1,str2)   把str2拼接到str1后面

           // 注意: 被拼接的字符串长度一定要够接收拼接完的字符串

         char str1[] = "I";

         char str2[] = "Love U";

        strcat(str1,str2);  

        (4) 字符串的比较  strcmp(str1,str2)

          // 从第一个字符开始比 ,如果一样,比较下一个字符,如果不一样,开始进行比较,比较的内容是相应的ASCll码的值,前面的减去后面的,如果值为正数

,前面的大于后面的,值为负数,前面的小于后面的.比较结束. 如果返回值是0,那么两个字符串相同.

        char str1[] = "I";

         char str2[] = "Love U";         

         int x = strcmp(str1,str2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值