您的位置:首页 > 其它

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

2013-12-15 18:03 316 查看

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]);

    }

 
a442
}

 (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)变长数组不能进行初始化,很少使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐