C语言数组(1) --- 初识数组
  uUWKQE7Avyk4 2023年11月02日 85 0

学习目标:

1.一维数组的创建与初始化

2.一维数组的使用

3.一维数组在内存中的存储

4.二维数组的创建与初始化

5.二维数组的使用

6.二维数组在内存中的存储

7.数组作为函数参数

8.数组的应用实例1:三子棋

9.数组的应用实例2:扫雷游戏


一.一维数组的创建与初始化

1.我们首先来讲数组的创建

概念:数组是一组相同类型元素的集合

数组的创建方式:

type_t  arr_name [const_n]

其中 type_t 为数组的元素类型,arr_name为数组名,const_n是一个常量表达式,用来指定数组的大小

下面我们来看一个实例:

要求创建一个整型数组,数组名不限,数组大小为能存放10个整型,代码如下:

#include<stdio.h>
int main(void){
	int arr[10];
	return 0;
}

下面我们来看几个例子:

代码1:

int main(void){
	int arr[10];
	return 0;
}

代码2:

int main(void){
  int n = 10;
	int arr[n];
	return 0;
}

代码3:

int main(void){
  char arr1[10];
  float arr2[20];
  double arr3[30];
	return 0;
}

我们依次运行后可以发现除了代码2,其余代码都可以完成编译并运行,那为什么代码2会出现问题呢?

我们将其放到编译器中编译,可以发现编译器抛出以下错误:

C语言数组(1) --- 初识数组_C语言

我们发现编译器告诉我们,在定义数组大小的时候,必须要使用常量表达式,而这里的n是变量,所以程序报了错,这也告诉我们在定义数组大小的时候需要使用常量表达式

2.数组的初始化

概念:数组的初始化是指,在创建数组的同时给数组的内容一些合理的初始值,如下代码:

int main(void){
	int arr1[5] = {1,2,3};
	int arr2[] = {1,2,3,4,5,6};
	char arr3[10] = {'a','b','c'};
	char arr4[] = { 'd', 'e',96};
	char arr5[20] = "hello my friend";
	return 0;
}

补充:

int arr1[5] = {1,2,3};

这种代码称为不完全初始化,我们对代码进行调试的时候可以在监视窗口中监视数组arr1的元素,如图所示:

C语言数组(1) --- 初识数组_数组_02

我们可以看到,程序只初始化了前三个元素,剩下的的元素默认被初始化为0

我们再来看这两句代码:

char arr1[3] = {'a','b'};
char arr2[] = "ab";

这两段代码执行后效果是一样的,但是执行的流程却有区别,第一句代码是将a b分别存入元素中,第二句代码除了将a b传入元素中,还将 '\0'(因为这是一串字符串) 也一并存入到数组的元素中,所以我们需要有所区别

3.sizeof()与strlen()的区别

我们来看一段代码:

#include<stdio.h>
#include<string.h>
int main(void){
	char arr[] = "abcdef";
	printf("sizeof = %d\n", sizeof(arr));
	printf("strlen = %d\n",strlen(arr));
	getchar();
	return 0;
}

我们运行上述代码后可以发现,程序输出了7和6,我们先来看sizeof(),我们前面讲过sizeof()是用来计算变量/数组/类型所占空间的大小的,在此代码中,数组的元素一共有7个,分别是: a b c d e f \0 每一个字符占用内存一个字节,那么七个字符就占用了内存7个字节,而strlen()是用来计算字符串长度的,strlen()只会统计到 a b c d e f ,注意 \0 并不会被strlen()函数计算在内,也就是使用strlen()函数来计算字符串长度的时候,只会计算到 \0 之前的字符个数

最后我们再来对这两个函数做一个总结:

1.strlen()与sizeof()两个函数并无关联

2.strlen()是计算字符串长度的函数,其函数只能求字符串

3.sizeof()是用来计算 变量/数组/类型大小的函数,其单位是字节

4.strlen()使用的时候需要包含头文件<string.h>,而sizeof()由于是操作符,所以可以直接使用

                                                                                                   2023/8/20

                                                                                                         王起舟

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月10日   23   0   0 #include数组i++
  X5zJxoD00Cah   2023年11月30日   39   0   0 GroupEmail字符串
uUWKQE7Avyk4