输入 /输出 缓冲区 与 数组的常识

1. 输入输出缓冲区

1.1 输入缓冲区

键盘——>键盘缓冲区——>输入缓冲区——>程序
scanf("%*[^\n]");
scanf("%*c");(丢弃任意一个字符)——>清空输入缓冲区——>程序
解释:*  丢弃读取到的内容
[^\n]    表示任何非\n的字符
如果读取到的数据类型匹配,那么缓冲区中的数据会被成功读取,缓冲区中被读取完的数据就不存在了


1.2 输出缓冲区

程序——>输出缓冲区——>屏幕
输出缓冲区内容到屏幕显示的方法:
(1)\n 刷新缓冲区

(2)fflush 用于刷新缓冲区

                 fflush(stdin)刷新输入缓冲区,但是这个基本不用

fflush(stdout);刷新输出缓冲区
(3)输出缓冲区满了的时候,可以显示在屏幕上,(一般大小4Kb)

(4)程序结束

2.数组

  2.1 数组的定义

  数据类型 数组名 [数组的长度];
  例如:int nums[10];表示定义了一个可以保存10个int类型数据的名为nums的数组
  使用数组名来标记数组的首地址,从而可以找到数组的内存空间,使用下标去访问数组中具体的元素
  下标:0  1 。。。9   访问数组中的第二个元素:nums[1]
注意: 
   
int nums [10];表示的是数组的长度,只有在定义的时候[]表示数组的长度
    nums[5];      5表示的是数组的下标,在使用的时候[]表示数组的下标

 2.2 数组的初始化

  (1)全部初始化
  int nums[5] = {1,2,3,4,5};
    (2)部分初始化
  int nums[5] = {11};剩余的元素默认初始化为0
  int nums[5] = {0};一般用于将数组所有元素初始化为0
  int nums[5] = {};将数组中所有元素初始化为0,不推荐使用
  (3)指定初始化
  int nums[5] = {[2] = 33};将数组中的第三个元素初始化为33
注意:
(1)C语言中定义数组的时候,要求指定数组的长度,不支持[]在数组名的前面
(2)如果非得不指定数组的长度,那么需要将数组进行全部初始化
int nums[] = {1,2,3,4,5,6};不推荐使用

2.3一维数组的赋值

    int num = 10;//变量的初始化
    num = 10;//变量的赋值
    int nums[5] = {11,22,33,44,55};//数组的初始化
  结论:
      数组定义的时候可以初始化,但是不可以使用数组名进行赋值,如果非要赋值的话,就通过数组的下标去对每一个元素进行赋值

2.4习惯用法

      (1)数组的清零
      for(i = 0;i < n;i++)
      {
         nums[i] = 0;
      }  
      (2)输入数据到数组中
        for(i = 0;i < n;i++)
        {
                   scanf("%d",&nums[i]);
        }
      (3)数组元素的求和
      for(i = 0;i < n;i++)
      {
         sums += nums[i];
      }
      (4)数组中的每一个元素都可以像普通变量一样去使用

2.5 数组的深入浅出

    -------------------
    数组名表示的是数组的首地址,也就是数组中第一个元素的地址数组名是个常量,不可改变
    对于数组来说,nums[i]实际上就是相对于数组名nums的一个偏移量
    int nums [5] = {11,22,33,44,55};
    nums = &nums[0] = nums + 0 = 数组中第一个元素的地址
    &nums 打印地址也是数组的首地址,但是级别不一样,分别使用nums + 1和&num + 1来查看级别的不同
    扩展信息:

2.6 数组的sizeof值

数组的sizeof = sizeof(数组中元素)*元素的个数
    int arr[5] = {11,22,33,44,55};
    sizeof(arr) = 4*5 = 20;
特例:
void fn (int arr[5])
{
sizeof(arr) = 4;//这里arr相当于一个指针,sizeof(指针) = 4
}

2.7数组的下标越界访问

     C语言中数组是可以越界访问的,程序中变量的内存分配顺序与变量的定义顺序无关,对数组进行越界访问时可能访问到其他变量的值,
  也可能引发段错误,所以要求程序员自己对数组进行下标控制,尽量避免数组的下标越界

2.8 数组的下标越界赋值

数组的下标越界赋值可能修改其他数据的值,还有可能引发段错误,所以要防止数组下标的越界

3 二维数组

 3.1二维数组的定义

     数据类型 数组名[行数][列数]
     例如:int arr[3][4];表示定义了一个3行4列的二维数组
  注意:
  二维数组在内存中是按照行主序进行排列 的

  3.2二维数组的初始化

  (1)全部初始化
    int arr[2][3];看做具有两个元素的数组,而每一元素又是一个具有三个元素的一维数组
    int arr[2][3] = {{11,22,33},{44,55,66}};
   (2)部分初始化
    int arr[2][3] = {{11,22},{33}};剩余的元素默认初始化为0
    int arr[2][3] = {{0}};表示将二维数组中所有元素初始化为0
   (3)指定初始化
    int arr[2][3] ={[0][2]=33};将第一行中第三个元素初始化为33
   行主序排列:int arr[2][3] = {11,22,33,44}
 例子:使用二维数组输出单位矩阵

3.3 习惯用法

 (1)清零
  for(i = 0;i < n;i++)
  {
     for(j = 0;j < m;j++)
     {
      arr[i][j] = 0;
     }
  }
 (2)从键盘键入
  for(i = 0;i < n;i++)
  {
    for(j = 0;j < m;j++)
    {
    scanf("%d",&arr[i][j]);
    }
  }
 (3)求和
  for(i = 0;i < n;i++)
  {
    for(j = 0;j < m;j++)
    {
    sum += arr[i][j];
    }
  }

 3.4变长数组(C99支持)

 例子:
     int num = 0;
     printf("请输入数组的长度:\n");
     scanf("%d",&num);
     int arr[num];
 注意:
 (1)注意变量和数组的定义顺序
 (2)变长数组不能进行初始化,很少使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值