热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C语言编程基础--数组

intage120;intage221;intage323;管理多个同类信息,----->数组数组是由数据类型一致

int age1 = 20;

int age2 = 21;

int age3 = 23;

 ......

管理多个同类信息,----->数组

 

数组是由数据类型一致的元素构成的

一:数组的定义:

1) 数据存储  数据类型   数组名 [ 元素的总数 ]  

int        arr [ 10 ]; 

 定义一个由10int类型的数据组成的数组变量;

 如果是局部变量的话,初始值为随机数;

 全局变量的话,初始值是全0

 数组变量对应的数组名就是arr

 

2) 数据存储  数据类型   数组名 [ 元素的总数 ] = { 元素初始值   }

int        arr [ 10 ] ={11,22,33,44,55,66,77,88,99,100}; 

定义一个由10int类型的数据组成的数组变量,数组里面的元素一次性被赋上了初始值

只有在定义数组的时候,才能一次性为所有元素赋值

 

int        arr [ 10 ] ={11,22,33,44,55,66,77 };

等价于 {11,22,33,44,55,66,77 0 0 0};

只要在定义的时候有为部分元素赋值,其它元素的值会被自动赋为0

   int        arr [ 10 ] ={0 }

等价于100;

 

3) 数据存储  数据类型   数组名 [  ]  ={   元素初始值    } 

         定义时缺省元素个数,由系统自动根据所赋的初值来计算出元素个数

               int   arr [  ] = { 11,22,33,44,55};

                       等价于定义一个由5int类型的数据组成的数组变量,

                               int   arr [ 5 ] = { 11,22,33,44,55};
                    int   arr [   ] ;注意这个写法是不可以,因为这个数组没有实际元素个数


二:数组的使用

1) 使用数组的下标来访问对应的元素   arr[i]

          非数组定义时,数组名[i] 这里的是i表示对应的下标从0开始计算的

           N个元素的数组,下标的有效范围{0 ~  N-1}

 

      int  arr [ 5 ] = { 11,22,33,44,55}; // 定义

    11  -----> arr[0]

    22  -----> arr[1]

    33  -----> arr[2]

    44  -----> arr[3]

    55  -----> arr[4]

    arr[5]  数组下标越界,编译的时候不会报错,

    但是不确定后果

    如果希望修改数组里全部元素的值,不可以再一次性赋值了

    arr [ 5 ] = {100 ,101,102,103,104}

    只能逐个元素进行赋值

    数组和for循环是个绝配

      for(i=0 ; i<5 ; i++ ) // 通过i 的值得变化,访问数组中的元素

     {

        //i{0...4}

        arr[i] = 100+i;

    }

 

2) 使用数组名  arr

     int arr[5] ; // 首元素是arr[0]

     数组名就是arr 在通常情况下表示的是数组中的首元素的地址

    arr ====&arr[0]

    只有和以下两个运算符组合在一起的时候例外

   sizeof ( arr )  ---- 表示整个数组的占用空间字节数

   &arr         ---- 整个数组的地址

 

如:  int  arr[ ] = {11,22,33};

  int  min;

  min= arr[0]

  for(i=0; i<sizeof(arr) / sizeof(arr[0])  ; i++) 

// 数组占用字节数/某元素的字节数  ==》元素的个数

 

 

三:可变数组

     在编译程序的时候,还不知道数组的元素个数,但是是确定数组类型和数组名,此时不能给可变数组赋初值;

     直到程序运行到代码定义数组的语句之前,元素的个数才被确定下来

         int length ;

         scanf("%d",&length);   在运行到可变数组定义前,必须得到数组的元素个数

         int array[length] ;//order~  

四:字符数组

  char 类型的数据组成的数组

  char arr[10] ;

  char arr[10] = “hello”;

  char arr[10] = {‘h’, ’e’, ’l’, ’l’, ’o’, ‘\0’ , 0, 0, 0, 0} ;

  char array[10] = {‘h’, ’e’, ’l’, ’l’, ’o’, ‘a’ , ‘b’, ‘c’, ‘d’, ‘e’} ; // 定义是没有问题的,

这个array不适合当成字符串来做操作了,一般是逐个元素的访问

                  {1,2,3,4,5,6,7,8,9,10};

‘\0’是“”自带的,通常我们需要对字符数组进行整体操作的时候,会用上’\0’

我们通常习惯字符串后面的自带’\0’

 

    char a[  ] = “hello” ;  这个字符数组一共占用了6  ‘h’, ’e’, ’l’, ’l’, ’o’, ‘\0’

 char a[ ] = {‘h’, ’e’, ’l’, ’l’, ’o’} ;   这个字符数组一共占用了5

练习:使用键盘给字符数组赋值%s,且把每个字符数组的元素都用%c逐个打印出来,

需要用空格隔开

                   char  arr[100]; // random

                   inti;

                   scanf("%s", arr) ;//scanf("%s", &arr[0])

//      for(i=0; i<100 ; i++)

         for(i=0; arr[i]!='\0' ;i++)// 类似%s  只要在内存中遇到了’\0’就停止打印

         {

                   printf("%c",arr[i]); // 只会显示有效字符

         }

  

scanf("%s" , arr);

               等价于scanf("%s" , &arr[0]);

                把键盘缓冲区中的字符依次放在数组arr的首元素开始的空间,

直到遇到空格或者换行符停止,同时增加一个"\0"

                如果要输入带空格的字符串,可以用scanf(“%[^\n]”,  arr);

或者是  fgets(arr , 100 , stdin);

                             

scanf("%c", &arr[0]);

               只是放置一个字符到首元素地址

 

printf("%s" , arr);

等价于printf("%s" , &arr[0]);

    从地址&arr[0]开始逐个取字符并打印,遇到了‘\0’就停止打印

 

printf("%c", arr[i])

打印对应的一个字符

 

sizeof(arr)  表示整个数组的占用空间字节数

strlen(arr)  函数,可以返回数组的有效字符数,也就是基于arr到‘\0’为止

 

练习:从键盘输入一个可变长度字符串,统计这个字符串中小写字母的个数

且把每个小写字母都打印出来

参考var_array.c 定义可变长度字符串

char_array3.c

******************

字符数组  %c通过下标逐个操作元素, 

%s是访问数组名,基于首元素地址开始操作数组

******************

错误~

char_array3.c:13:9: warning: format %s expects argumentof type char *, but argument 2has type int * [-Wformat=]

%s’这个格式需要的类型是char *(char类型数据的地址),但是第二个参数是int类型数据的地址




推荐阅读
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
author-avatar
每张照片都有它的心情和故事
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有