二维数组

  1 -------------------------------------
  2 day05
  3 
  4 -------------------------------------
  5 回顾:
  6     1》控制流
  7         分支结构: 
  8             if   else if  else
  9             switch case    ---  break
 10             goto
 11     2》函数:
 12         返回值  函数名字(函数参数)
 13         {
 14             函数体
 15         }
 16         
 17         void fun(void)
 18         {
 19             xxxx;
 20         }
 21         
 22         int main(void)
 23         {
 24             fun();        --函数调用
 25         }
 26         
 27     3》指针:
 28         *》取地址 & 
 29             char xx = 'a';
 30             &xx; ---- char *   
 31             char *yy = &xx;
 32             printf("%p\n",yy);
 33             
 34         *》解引用:*
 35             *yy  ---->  xx
 36         
 37     4》数组:
 38         同一类型数据紧挨保存在一块空间
 39         short arr[33];
 40         
 41 -----------------------------------------
 42 如何修改 vi 界面:
 43     vim ~/.vimrc
 44             set cursorline
 45             set nu
 46             set mouse=a
 47             set tabstop=4
 48             set softtabstop=4
 49             set shiftwidth=4
 50             set cindent
 51             set ruler
 52             
 53             
 54 如何快速整理格式:
 55     在命令模式下
 56         gg=G
 57             
 58 --------------------------------------------
 59 字符数组:-----就是 字符串
 60     *》概念:
 61         数组里面的保存的都是字符
 62         
 63     *》姿势:
 64         char 数组名字[数组大小];
 65         例子:
 66             char arr[50];
 67     
 68     *》定义,赋值 都类似数组..
 69     *》初始化:
 70         *>不完全初始化
 71             char arr[20]={'A'}; 下标为0的位置保存'A',其他全部为0
 72             char arr[20]={0};  
 73             还可以: char arr[20]={'\0'};
 74             char arr[20]="fewf";
 75                 "fewf"  ---> 有5个字符 'f' 'e' 'w' 'f' '\0'
 76             
 77         *>完全初始化
 78             char arr[10]="123456789";
 79             char arr[10]="0123456789";----理论上这是错误的
 80             
 81     *》字符串函数的使用:
 82         *》bzero  ---- 清空
 83         #include <strings.h>
 84         void bzero(void *s, size_t n);
 85         解释:
 86             bzero()函数将从s开始的区域的前n个字节设置为零
 87         分析:
 88             s:    万能指针类型变量,你需要清0的对象
 89             n: 需要清0的字节数
 90             返回值: 没有返回值
 91             
 92         例子:
 93             int a = 0x0f3e5523;
 94             bzero(&a,2); --->??? 0x0f3e0000
 95             
 96         以后经常使用:
 97             char buf[50];  ----> 垃圾值    char *
 98             bzero(buf,sizeof(buf));
 99             
100         
101         void : 没有类型的类型,包含了所有类型,然后又不能用任何类型
102         void * ---> 万能指针
103         void *xx;  --- 万能指针类型的变量  xx;
104         short *ss = (short *)xx;
105         int *ii = (int *)xx;
106         
107         void *yy = ii; --->自动转换
108         
109         size_t :  取别名操作   unsigned int
110         typedef unsigned int size_t;
111         
112         *》memset:
113         #include <string.h>
114         void *memset(void *s, int c, size_t n);
115         解释:    
116             memset()函数将s所指向的内存区域的前n个字节填入c
117         分析:
118             s:    万能指针类型变量,你需要操作的对象
119             c:  填充物
120             n: 需要操作的字节数
121             返回值:  void *  --- 万能指针类型
122                 返回的就是s
123         例子:    
124             char arr[20]={0};
125             memset(arr,'a',10);
126             printf("%s\n",arr);------>   aaaaaaaaaa
127                 解说: printf用 %s来打印字符串,碰到'\0'才会结束
128                     abcdefd  --》 将c换成'\0'  就只能打印ab
129                     
130         *》strcpy
131         #include <string.h>
132         char *strcpy(char *dest, const char *src);
133         解释:    
134             将src(包括'\0')拷贝到dest中---- 覆盖dest--从第一个字节开始
135             dest空间要比src空间大
136         分析:
137             src :  原数组(数据)
138             dest:    目标数组(数据)
139             返回值: char * ---- 字符指针类型
140                 返回dest
141                 
142         例子:
143             char dest[20]="ILOVEU";
144             char src[10]="OK";
145             strcpy(dest,src);
146             
147         char arr[20]; ---》 arr是什么东西???
148         解说: arr 是数组的首地址,也是第一个元素的地址
149                arr的值不允许发生改变
150                结果: arr 是 char * 类型
151             
152 
153 
154             
155         char name[20]="Tonly";
156         if(name=="Tonly")------没有这种写法,该写法错误       
157         *strcmp
158         #include <string.h>
159         int strcmp(const char *s1, const char *s2);
160         解释:
161               strcmp()函数对两个字符串s1和s2进行比较。 它返回 一个小于、等于或大于0的整数
162               本质:   
163                 *》选取s1的第一个字符 和 s2的第一字符进行对比,
164                     如果 s1的第一个字符 比 s2的第一字符小 就返回一个负数
165                     如果 s1的第一个字符 比 s2的第一字符大 就返回一个正数
166                     如果 s1的第一个字符 比 s2的第一字符相等,则比较第二个字符
167                 如果s1和s2相等,则返回0
168         分析:
169             s1  s2 需要比较的字符串
170             返回值:
171                 s1 < s2  返回负数
172                 s1 > s2  返回正数
173                 s1 等于 s2 返回0
174 
175         例子:
176             char s1[20]="ILOVEU";
177             char s2[20]="ILOVEU";
178             strcmp(s1,s2);
179 
180     
181         *strlen
182         #include <string.h>
183         size_t strlen(const char *s);
184         解释:
185             strlen计算s的长度(不包含'\0'186             该计算 碰到 '\0'就结束
187         分析:
188             s: 字符串
189             返回值:
190                 size_t  : unsigned int  字符串的长度
191         
192 ---------------------------------
193 const194     *》不变的,修饰谁,谁就是不能改变的值
195         例子:
196             const int a = 10;
197             a = 20;    -------出错
198             
199     *200         int b = 20;
201         int a = 10;
202         const int *p = &a;---->  const 修饰的是 *p
203         所有  *p 不允许发生改变
204         
205         p = &b; ---没问题
206         *p = 30; ---出错
207         a = 30; ---没问题
208         
209     *210         int b = 20;
211         int a = 10;
212         int * const p = &a;  ---》 const 修饰的是p
213         p不允许发生改变
214         
215         p = &b;     --- 错误
216         *p = 30;    ---没问题
217         
218     *>
219         int a = 10;
220         const int * const p = &a;
221         *p 和 p 都不允许发生改变
222         
223         
224         int a = 10;
225         const int *p= &a;   const 修饰的*p不允许改变 -- 不允许通过*p方式去改变值
226         const 修饰*p --阻止解引用改变值的操作
227         *p = 30; --- 出错。
228         int *pp = p;
229         *pp = 30; ---没有问题
230         
231 ----------------------------------------------------------
232 可变数组:
233     1》概念:
234         数组在定义前,大小可变
235 
236     2》姿势:
237         类型 数组名[N];      N代表一个变量
238         int a = 100;
239         int arr[a];-----可变数组
240             
241         ****可变数组一旦定义好之后就永远不能发生改变
242         
243     3》注意事项:
244         可变数组不允许发生 初始化 操作,只能定义并通过下标的方式赋值
245         int a = 20;
246         int arr[a]={1,2,3,4,5};-----这是错误的
247         
248     4》好处:
249         在程序运行的时候来决定数组的大小
250         
251 ------------------------------------------------
252 二维数组:
253     1》概念:
254         一个一维数组的 元素 是 一维数组就形成了二维数组
255         
256     2》姿势:
257         类型  数组名字[一维数组的个数][每一个一维数组中元素个数];
258         例子:
259             int arr[2][3];
260             ----- 该数字由 2个 一维数组组成,每一个一维数组中有3个int类型数据
261             顾:组成该二维数组的基本元素个数有6个int类型
262     
263     3》赋值:
264         int arr[2][3];
265         arr[0][0]=10;
266         arr[1][1]=20;
267             
268     4》初始化:
269         *》完全初始化:
270             int arr[2][3]={1,2,3,4,5,6};
271             int arr[2][3]={{1,2,3},{4,5,6}};
272             
273         *》不完全初始化:
274             int arr[2][3]={0};
275             int arr[2][3]={[0][1]=10,[1][1]=20};
276             
277     5》使用:
278         int arr[3][4]={
279             {1,2,3,4},
280             {5,6,7,8},
281             {9,8,7,6}
282         };
283         
284 练习:
285     打印: 5*5 的二维数组的对角线的值
286     int arr[5][5]={
287         {1,2,3,4,5},
288         {},
289         {},
290         {},
291         {}
292         
293     };
294             
295 ---------------------------------------------------------
296 多维数组:
297     *》姿势:    
298         int arr[2][3][4][5][6][7];
299         分析:
300             这是一个  6维数组
301             该数组由 2个  5维数组组成
302             每一个5维数组有 3个 四维数组组成
303             每一个4维数组 由 4个 三维数组组成
304              每一个三维数组 由 5个 二位数组组成
305              每一个二维数组由 6个 一维数组组成
306              每一个一维数组 由 7个 int 类型组成
307              
308         打印出每一个值:
309         int i,i,k,x,y,z;
310         for(i=0;i<2;i++)
311         {
312             for(j=0;j<3;j++)
313             {
314                 for(x=0;x<4;x++)
315                 {
316                     for(y=0;y<5;y++)
317                     {
318                         for(z=0;z<6;z++)
319                         {
320                             for(k=0;k<7;k++)
321                             {
322                                 printf("%d",arr[i][j][x][y][z][k]);
323                             }
324                         }
325                     }
326                 }    
327             }
328             
329         }
330         
331 -----------------------------------------

 

posted @ 2021-09-28 20:22  cgy33  阅读(66)  评论(0)    收藏  举报