数组大纲

 

多维数组
二维数组 重点 (三位以上基本不会用到)
都是用来存数据

一个班有20个人 可以用一维数组存20个人的年龄
int age[20];
一个年级10个班 每个班20人
int age[10][20];//二维数组
一个学校 6个年级 每个年级10个班 每个班20人 一个年级作为一个元素
int age[6][10][20];//三维数组

定义时 后面有多少个[]就是几维数组

二维数组 数组的数组
--->数组元素 也是数组
age[0][1][2] 0年级的1班学号是2的同学
age[0] 0粘结
gae[0][1] 0年级1班
age 三维数组
age中的元素---> age[0] age[1] age[2] age[3] age[4]

越界 用到了数组外面的内容 不属于你的地方 没人可以管 会出问题
数组大小不确定时 可以稍微大一点点

 

 

测试代码

  1 /*
  2 字符串后面 才有\0
  3 
  4 字符串的末尾 \0
  5 char arr[10]; //字符数组
  6 
  7 字符串一般存放在字符数组中
  8 */
  9 
 10 #include<stdio.h>
 11 #include<string.h>//用函数strlen时要用到
 12 
 13 int main()
 14 {//一维数组复习
 15 #if 0
 16     char arr[100] = "hello world\0"; //还有很大的空间没有存放数据
 17     char brr[4] = {'a','b','c'};//相当于赋值“abc” 空间大小为4 多出来的一位默认赋值为0 而在ASCII中 /0就是 0
 18     char crr[] = "123456\0";//定义的是后赋值 才可以省略大小 (有效无效字符都要存进去)
 19 
 20     printf("%s\n",brr);
 21     printf("%d\n",sizeof(arr));//求数组大小 (单位字节)
 22     printf("%d\n", strlen(arr));//字符串长度 长度是算到\0为止的个数
 23     //strlen 字符串的有效长度 算到\0为止
 24     scanf("%s",arr);//数组名 不需要取地址符 scanf中间有空格 会当成两个字符串
 25     gets_s(arr, 100);//100 字符串长度最多能到100  gets专门用于字符串数组的输出
 26     gets(arr);
 27     //回车作为结束
 28     puts(arr);//专门用于字符串的输出
 29     printf("输入的内容是%s",arr);//输出
 30 
 31 #endif
 32 
 33 //多维数组
 34     /*
 35     多维数组
 36      二维数组 重点 (三位以上基本不会用到)
 37     都是用来存数据
 38 
 39     一个班有20个人 可以用一维数组存20个人的年龄
 40     int age[20];
 41     一个年级10个班   每个班20人
 42     int age[10][20];//二维数组
 43     一个学校 6个年级 每个年级10个班 每个班20人 一个年级作为一个元素
 44     int age[6][10][20];//三维数组
 45 
 46     定义时  后面有多少个[]就是几维数组
 47     
 48     二维数组 数组的数组
 49     --->数组元素 也是数组
 50     age[0][1][2]  0年级的1班学号是2的同学
 51     age[0]  0粘结
 52     gae[0][1]  0年级1班
 53     age  三维数组
 54       age中的元素---> age[0] age[1] age[2] age[3] age[4]
 55 
 56       越界 用到了数组外面的内容 不属于你的地方 没人可以管 会出问题
 57       数组大小不确定时 可以稍微大一点点
 58     */
 59 #if 1
 60     //int dArr[10][20];//一般前面的10称为行 后面的20称为列
 61     //for (int i = 0; i < 10; ++i)
 62     //{
 63     //    for (int j = 0; j < 20; ++j)
 64     //    {
 65     //        dArr[i][j] = i*j;
 66     //    }
 67     //}
 68     //for (int i = 0; i < 10; ++i)//先行
 69     //{
 70     //    for (int j = 0; j < 20; ++j)//后列
 71     //    {
 72     //        printf("%d\t",dArr[i][j]);
 73     //    }
 74     //    printf("\n");
 75     //}
 76 
 77     
 78     
 79     //test[i][j] 和 test[i][j+1] 地址 相差4个字节(一个int大小)
 80     //test[i][j] 和 test[i+1][j] 地址 相差16个字节(一行的大小 4个int大小)
 81     //本质二维数组存放方式和一位数组无异 但是他得使用方式不一样
 82     //地址是一样的 类型是不一样的 使用方式也不一样
 83     //&arr和&arr[0]的数据类型不一样 但是存的内容是一样的
 84     int test[3][4];
 85     for(int i = 0; i < 3 * 4; ++i)
 86     {
 87         test[0][i] = i;
 88     }
 89     for (int i = 0; i < 3; ++i)
 90     {
 91         for (int j = 0; j < 4; ++j)
 92         {
 93             printf("%d\t",test[i][j]);
 94             printf("%p\t",&test[i][j]);//%p 打印地址 是16进制
 95         }
 96         printf("\n");
 97     }
 98 
 99 #endif
100     
101     
102     while (1);//防止闪屏
103     getchar();
104     return 0;//表示函数结束
105 }

 

 

 

2018-07-17 17:31:02