深入掌握数组定义与初始化

        关于这一部分呢,看似很简单,实际运用起来却会有很多问题,课本上讲了,又没有完全讲清楚。 在运用数组的这个方法处理问题是十分灵活的,非常容易产生一些小错误导致代码不能正确运行。所以在本篇博客我将会对众多小细节加以解释,区分,同时也会举一些巧妙的实际运用。

            在本片文章中数组主要为一维数组,从整型和字符型数组两方面讨论。

目录

整型数组

字符型数组

应用


整型数组

先看一下几种定义数组的方式

1.定义数组

int arr1[5];

该数组arr1只进行了定义,没有进行初始化所以里面的元素是一团乱麻。

2.定义空数组

int arr2[5]={0};

 

两种格式看上去十分相似但又不完全一样。

打开监视,注意观察此处,未初始化的整型数组自动将元素都赋值为'0'。这和后边介绍的字符型数组不同。

3.完全初始化

int arr3[5] = { 1,2,3,4,5};
int arr4[] = { 1,2,3,4,5 };

观察两个数组不同的定义方式,尽管arr4没给数组长度,但任然和arr3一样

4.不完全初始化

int arr5[5] = { 1,2,3};//可见后面自动补为0

 arr5中定义了数组长度,但初始化的只有前三个元素,所以后面的全部都自动补为'0'

5.用scanf输入整型数组

int arr6[5];
	for (i = 0; i < 5; i++)
	{
		scanf("%d", &arr6[i]);
	}

此处是常用的一种输入整型的方法。

要注意的是此处arr[i]前一定要记得加取址符'&'在输入时,整型元素用空格隔开(不同于后面介绍输入字符型数组的方法)

例如:

1 2 3 4 5       ENTER回车

 效果就是这样。

6.整型转化为ASCII码值

int arr7[5] = { 'a','b','c'};

 如果我们在整型数组中输入字符会这么样呢根据ASCII码表

 观察到字符转化为整型存储在元素之中。可以理解为字符和整型是等效的。

字符型数组

1.定义字符数组

char ch1[5];

 和整型数组情况类似。

2.空数组

char ch2[] = { 0};
char ch3[5] = { 0 };///此处0为ASCII码表中对应的NULL所以为空字符

这里不同于整型数组,在此处存放'\0',意思为停止。

 3.不完全初始化

char ch4[5] = { 'l','o','v' };//未完全初始化,自动补\0
char ch5[5] = { "lov" };
char ch6[5] = "lov";

 ’\0’是数组结束的标志。当ch6一样输入字符串时,会自动补齐‘\0’。这三种写法都是正确的。

4.完全初始化

char ch7[] = "love";
char ch8[4] = "love";

不同于整型数组,凡是在"  "之中的字符在初始化数组时。都会自动在后面补\0。当长度不足时,例如ch8,‘\0’当不下了,就不会补了。

5.字符数组与ASCII码值

char ch9[5] = { '1','2','3',97,98 };//在字符数组输入整型会转化为对应的ASCII字母

 

和直接在字符型数组中输入整型,会转化成对应的字母。可以理解为在此处整型和字符是等效的。

6.输入字符型数组

char ch10[5];
for (i = 0; i < 5; i++)
    scanf("%c", &ch10[i]);

和整型数组不一样,这里输入空格不能将元素隔开而会被当成元素直接使用。记得输入字符时候也要加&。

例如在此处输入    a   b     空格会记录在ch10[1]中。

还没结束,如果输入一段字符串的话,会导致空格输入提前结束。ps:数组名字ch11是数组首元ch11[0]的地址,所以此处不用&。

char ch11[5];
	for (i = 0; i < 5; i++)
		scanf("%s", ch11);

例如输入:   ab cd

 所以我们如何输入一段带有空格的英语句子到字符数组中呢,第一种方法就是用循环scanf("%c")输入,第二种方法就是利用gets函数。

char ch12[5];
	gets(ch12);

在此处输入  a  b,结果如下:空格可以正常使用啦。

 由此可见gats和scanf函数最大的区别就在于对空格的不同处理方式。

应用

题干:输入二进制数字,将其转化为十进制数字(例如输入1111,输出15)

大家可以思考一下,再看一下我给出的两种方法。

方法1:

#include<stdio.h>
int main()
{
	int i, D = 0;
	char B[50];
	gets(B);
	for (i = 0; B[i] != '\0'; i++)
	{

		D = D * 2 + B[i] - '0';

	}
	printf("%d", D);
}

方法2:

#include<stdio.h>
int main()
{
	char B= { 0 };
	int D = 0;
	while (B = getchar(), B != '\n')
	{
		D = D * 2 + B - '0';
	}
	printf("%d", D);
}

以上就是本篇文章的全部内容啦。不知不觉字数已到了2000,写得很仔细,希望能对大家有一些帮助。

  • 33
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值