——黑马程序员——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 } };

三、二维数组的遍历

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

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

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

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

五、字符数组

字符数组的初始化和其他的一维数组的初始化基本相同
例如: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作为结束符,因此常常省略字符数组的长度
测试代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定义字符数组
	char s[6] = {'a','b','c','d','e','f'};
    int i;
    //遍历字符数组
    for(i = 0; i < sizeof(s); i++)
    {
		printf("s[%d] = %c\n",i,s[i]);
    }
    printf("\n");
	//定义字符数组并初始化为字符串
	char str[7] = "abcdef";
    int j;
    //遍历字符串
    for(j = 0; j < sizeof(str); j++)
    {
    //计算数组长度
    printf("str[%d] = %c\n",j,str[j]);
    }
    printf("\n");
    //以字符串格式输出
    printf("以字符串格式输出为:%s\n",str);
	system("pause");
	return 0;
}
测试结果:

六、字符串的输入和输出

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

测试代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
	//定义字符数组
	char s[] = {'a','b','c','d'};
    //输出字符串
    printf(" %s\n",s);
    printf("\n");
    //从给定地址输出
	printf(" %s\n",&s[2]);
    printf("\n");    
    
    //定义一个字符串
	char s1[] = {'a','b','c','d','\0'};
    // 直到遇到\0结束测试
    printf(" %s\n",s1);
    //从给定地址输出
	printf(" %s\n",&s1[2]);
	system("pause");
	return 0;
}
测试结果

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

测试结果2:












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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值