C语言之数组

数组


1.  定义数组大小 const int 也可以
2.  初始化  int count [100] = {0}    还有 int count [] = {[1]=3,[5]=9} 0 3 0 0 0 9 
3.  赋值
4. 遍历  

  • sizeof () 给出整个数组所占据的内容的大小,单位是字节
    #include<stdio.h>
    int main(){
        int count [10] = {[1] = 3,[4] = 3};
        for(int i = 0 ; i < sizeof(count)/sizeof(count[0]);i++){
            printf("%d ",count[i]);
        }
        return 0;
    }

  • 数组不能赋值给另外一个数组                                     int a [] = {}; int b[] = a; 错误  需要通过遍历赋值

  • 当我们将数组作为参数时,往往必须再用另一个参数来传入数组大小  int search(int key, int a[] , int length){...}  不能利用sizeof来获取数组长度
    #include<stdio.h>
    void search(int a[]){
        for(int i = 0 ; i < sizeof(a)/sizeof(a[0]);i++){
            printf("%d ",a[i]);  //0 3  错
        }
    }
    int main(){
        int count [10] = {[1] = 3,[4] = 3};
        search(count);
        return 0;
    }


  • 数组单元在内存中是连续存放的
    #include <stdio.h>
    
    #include <stdlib.h>
    int main()
    {
        int a[10] = {0};
        int i = 0;
        printf("int类型占用内存%d个字节.\n", sizeof(a[0]) );
        for ( i = 0; i < 10; ++i)
        {
            printf("a[%d]的地址是%X\n", i, &a[i] );
        }
        return 0;
    }
    输出结果
    int类型占用内存4个字节
    a[0]的地址是0X22FEF4
    a[1]的地址是0X22FEF8
    a[2]的地址是0X22FEFC
    a[3]的地址是0X22FF00
    a[4]的地址是0X22FF04
    a[5]的地址是0X22FF08
    a[6]的地址是0X22FF0C
    a[7]的地址是0X22FF10
    a[8]的地址是0X22FF14
    a[9]的地址是0X22FF18
    可以看出在内存中是连续存储的。

  • 二维数组 a[i,j] = a[j] 逗号运算符

数组可以存放在变量里,每一个变量都有自己的名字,有一个类型,还有它的生存空间。如果我们需要保存一些相同类型、相似含义、相同生存空间的数据,我们可以用数组来保存来保存这些数据,而不是用很多独立的变量。
数组是长度固定的数据结构,用来存储指定的数据。一个数组可以有很多个数据,所有数据的类型都是相同的。


  • 没有数组求平均数
    #include <stdio.h>
    int main (){
      int x ;   
      double sum = 0 ;
      int cnt = 0;
      scanf("%d",&x);
      while(x!=-1){
          sum += x;
          cnt++;
          scanf("%d",&x);
      }
      if(cnt!=0)printf("%f\n",sum/cnt);
      return 0;
    }
  • 数组解决所有数大于平均数
    #include <stdio.h>
    int main (){
      int x[100] ;    //安全隐患  a 可能会大于100;
      double sum = 0 ;
       scanf("%d",&x[0]);
      int a = 0;
      while(x[a]!=-1){
          sum += x[a];
          a++;
          scanf("%d",&x[a]);
      }
      double temp = sum/a;
      printf("%f\n",temp);
          int i ;
      for (i = 0 ; i <= a ; i++ ){
          if(x[i]<=temp)printf("%d\n",x[i]);
      }
      return 0;
    }

定义数组【容器】+ 初始化!!!!        

<类型> 变量名称[元素数量];
C99之前:元素数量必须是编译时刻确定的字面量 不能是变量,C99后就可以int a [b]

  • 是一种容器(放东西的东西)
  • 其中所有的元素具有相同的数据类型
  • 一旦创建,不能改变大小
  • 数组中元素在内存是中是连续依次排序的
  • 从0开始,编译器省了很多工作

有效的下标范围

  • 编译器和运行环境都不会检查数组下标是否越界,无论是对数组单元做读还是写
  • 一旦程序运行,越界的数组访问可能会造成问题,导致程序奔溃
  • segmentation fault
  • 但是可能运气好,没造成严重后果
  • 所以这是程序员的责任来保证程序只使用有效下标值:[0...数组大小-1]
  • 数组建立后要进行初始化,如果数组里的值都是无法预测的。越界是可以继续运行的 a[10] = 一个未知数 a[10] = 1 会报错
  • 可以创建长度为0 的数组 可以存在,但是无用

for(int i=0;i<9;i++) 在c语言中是错误的?

答:C99标准以前的C标准是不支持临时变量在for循环中定义的,C99标准就支持这样写。但是目前有些编译器并不怎么愿意支持C99标准,或者默认以C89模式进行编译执行。



数组运算

初始化

  • int arr[] = {1,2,3,4,5}
  • 初始化 for () {}
  • int arr [!=1] ={0}
  • int arr[][5] = {{0,1,2,3,4},{5,6,7,8,9}}; 初始化
  • 列数是必须要给出的,行数可以由编译器得出
    i,j => j


找素数的方法
  • 从2到x-1
  • 从2到sqrt(x)
  • 拿比x小的所有素数进行判断
  • 构造一个素数表

统计sum%6 count[i]%6 * (i+1)%6


C/C++语言 文章被收录于专栏

记录学习笔记

全部评论

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
昨天 09:40
已编辑
西安邮电大学 golang
redf1sh:默认会git结果发现真不会,这种一看就是没做过项目的,真做过项目的至少会提交
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务