当前位置:   article > 正文

——黑马程序员——C语言中二维数组、字符数组和字符串_二维数组的结束字符

二维数组的结束字符
-----------android 培训 java培训 、java学习型技术博客、期待与您交流!-----------
C语言中二维数组、字符数组和字符串

一、二维数组

一般形式:
类型说明符  数组名   常量表达式 ]  [常量表达式 ];
例如:
int a[3][4];
二维数组常称为矩阵。二维数组可以看着是一种特殊的一维数组。

二、二维数组初始化

1、分行给二维数组初始化
int a[3][4] = { { 1,2,3,4 }, { 5,6,7,8 },  { 9,10,11,12 } };
2、可以将所有的数据写在一个{ }内
int a[3][4] = { 1,2,3,4,5,6,7,8, 9,10,11,12 };
3、可以部分初始化
int a[3][4] = { { 1 },  { 5 },  { 9 } };
他的作用是只对各行第1列(即序号为0的列)的元素赋初值,其余元素自动赋值为0,赋值后数组各元素为:
1 0 0 0
5 0 0 0
9 0 0 0
4、也可以给某一元素赋值
int a[3][4] = { { 1 },  { 5, 6 },  { 0, 9 ,11 } };
初始化后的数组元素为;
1 0 0 0
5 6 0 0
0 9 11 0
5、数组长度可以是常量表达式
int a[3][3+1] = { { 1 },  { 5, 6 },  { 0, 9 ,11 } };
6、二维数组可以省略第一维
int a[ ][4] = { { 1,2,3,4 },  { 5, 6,7,8 },  { 9, 10 ,11,12 } };
7、二维数组也可以先定义后初始化
int a[3][4] ;
 a[3][4]  = { { 1 },  { 5, 6 },  { 0, 9 ,11 } };

三、二维数组的遍历

利用一个双循环对二维数组进行遍历,外层循环控制列,内层循环控制行
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. { //定义变量
  5. int m = 3;
  6. int n = 4;
  7. //定义二维数组
  8. int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
  9. //遍历数组
  10. for(m = 0; m < 3; m++)
  11. {
  12. for(n = 0; n < 4; n++)
  13. {
  14. printf("a[%d][%d] = %d ",m,n,a[m][n]);
  15. }
  16. printf("\n");
  17. }
  18. system("pause");
  19. return 0;
  20. }
测试结果:

四、二维数组的内存存储细节

存储方式
1、计算机会给二维数组分配一块连续的存储空间
2、数组名代表的是数组的首地址,从首地址位置其,依次存入第一行、第二行.......
3、每一行的存储防暑,从行的首地址开始依次存储行的第1个元素、第2个元素.....
4、每个元素占用相同的字节数(取决于数组的类型)
5、数组元素之间的地址是连续的
测试代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. { //定义变量
  5. int m = 3;
  6. int n = 4;
  7. //定义二维数组
  8. int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
  9. printf("二维数组元素\n");
  10. //遍历数组
  11. for(m = 0; m < 3; m++)
  12. {
  13. for(n = 0; n < 4; n++)
  14. {
  15. printf("a[%d][%d] = %d ",m,n,a[m][n]);
  16. }
  17. printf("\n");
  18. }
  19. printf("\n\n");
  20. //取出二维数组元素的地址
  21. printf("二维数组首地址为:&a = %p\n\n",a);
  22. //二维数组的地址
  23. printf("二维数组的地址\n");
  24. int i,j;
  25. for(i = 0; i < 3; i++)
  26. {
  27. for(j = 0; j < 4; j++)
  28. {
  29. //二维数组的元素的地址
  30. printf("&a[%d][%d] = %p ",i,j,&a[i][j]);
  31. }
  32. printf("\n");
  33. }
  34. system("pause");
  35. return 0;
  36. }
测试结果:

 二维数组占用的总字节数:每行占用的字节数之和。
测试代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. //定义一个数组
  6. int a[3][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11}};
  7. //计算数组长度
  8. printf("二维数组a[3][4]的长度为:%d\n",sizeof(a));
  9. system("pause");
  10. return 0;
  11. }
测试结果:

五、字符数组

字符数组的初始化和其他的一维数组的初始化基本相同
例如:char ch[ 3 ] = { 'a' }
它表示给字符数组的第一元素初始化为字符a,其他元素的值系统自动初始化为\0,对应的ASCII码值为0.
1、作用:1、保存字符
        2、保存字符串,以\0结束。 C语言中没有字符串类型,只能用字符数组存储字符串
2、字符串:位于双引号当中的字符序列
3、字符数组存储字符串的初始化方式
(1)char [5] = "abcd";    此处长度必须大于字符串的长度,因为末尾需要存储一个\0作为结束符,因此常常省略字符数组的长度
(2)char [5] = {"abcd"};  此处长度必须大于字符串的长度,因为末尾需要存储一个\0作为结束符,因此常常省略字符数组的长度
测试代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. //定义字符数组
  6. char s[6] = {'a','b','c','d','e','f'};
  7. int i;
  8. //遍历字符数组
  9. for(i = 0; i < sizeof(s); i++)
  10. {
  11. printf("s[%d] = %c\n",i,s[i]);
  12. }
  13. printf("\n");
  14. //定义字符数组并初始化为字符串
  15. char str[7] = "abcdef";
  16. int j;
  17. //遍历字符串
  18. for(j = 0; j < sizeof(str); j++)
  19. {
  20. //计算数组长度
  21. printf("str[%d] = %c\n",j,str[j]);
  22. }
  23. printf("\n");
  24. //以字符串格式输出
  25. printf("以字符串格式输出为:%s\n",str);
  26. system("pause");
  27. return 0;
  28. }
测试结果:

六、字符串的输入和输出

(1)以%c输出时每次打印一个字符,需要循环才能实现字符串的全部输出
(2)以%s格式输出时可以从给定的地址开始一次打印一个字符串直到遇到\0结束
(3)以%s输出一个字符数组,初始化时就必须以\0结束,如果不写\0,则会打印出所有的字符直到遇到\0才结束输出
测试代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. //定义字符数组
  6. char s[] = "HeiMaXunLianYin";
  7. //输出字符串
  8. printf(" %s\n",s);
  9. printf("\n");
  10. //从给定地址输出
  11. printf(" %s\n",&s[5]);
  12. printf("\n");
  13. //定义一个字符串
  14. char s1[] = "HeiMa\0XunLianYin";
  15. // 直到遇到\0结束测试
  16. printf(" %s\n",s1);
  17. system("pause");
  18. return 0;
  19. }
测试结果;

测试代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. //定义字符数组
  6. char s[] = {'a','b','c','d'};
  7. //输出字符串
  8. printf(" %s\n",s);
  9. printf("\n");
  10. //从给定地址输出
  11. printf(" %s\n",&s[2]);
  12. printf("\n");
  13. //定义一个字符串
  14. char s1[] = {'a','b','c','d','\0'};
  15. // 直到遇到\0结束测试
  16. printf(" %s\n",s1);
  17. //从给定地址输出
  18. printf(" %s\n",&s1[2]);
  19. system("pause");
  20. return 0;
  21. }
测试结果

(4)以%s输入时注意空格,如果输入时含有空格,遇到空格就会结束
测试代码:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. //定义字符数组
  6. char s[]={'0'};
  7. //输出字符串
  8. printf("请输入一个字符串\n",s);
  9. //接受键盘输入的值
  10. scanf("%s",s);
  11. //打印输入的字符串
  12. printf(" 您输入的字符串为:%s\n",s);
  13. system("pause");
  14. return 0;
  15. }
测试结果1:

测试结果2:












声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/319747
推荐阅读
相关标签
  

闽ICP备14008679号