2021.11.25 关于c语言的数组

 目录

一维数组

关于一维数组的创建

关于数组的打印

关于“strlen”与“sizeof”的区别

关于 sizeof 的基本用途

关于一维数组在内存中的储存

二维数组

关于二维数组的创建 

关于二维数组的打印

关于二维数组在内存中的储存

一维数组

关于一维数组的创建

数组的[]中要给一个常量才行,不能使用变量

错误写法:

2021.11.25 关于c语言的数组

 正确写法:

2021.11.25 关于c语言的数组

 除整型之外还可创建以下数组:

2021.11.25 关于c语言的数组

注意:不完全初始化,剩下的元素默认初始化为0。

示例如下:

2021.11.25 关于c语言的数组


关于数组的打印

我们需根据其数组的下标来进行打印,而下标是从0开始。

举例:

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	char arr [] = "abcdef";
	//            "  a b c d e f \0"
	//     下标   "  0 1 2 3 4 5 "
	int i = 0;
	// 定义整型 ‘i’ 为下标数
	for (i = 0; i < 6; i++)
	{
		printf("%c", arr[i]);
	}
	return 0;
}

结果为:

2021.11.25 关于c语言的数组 


关于“strlen”与“sizeof”的区别

siazeof(计算变量、数组、类型的大小—单位是字节—操作符)

strlen(求字符串的长度—“\0”之前字符个数—仅针对字符串求长度—得引用头文件<string.h>)

示例1如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int main()
{
	char arr4[] = "abcdef";
	               //    "abcdef\0"
	printf("%d\n", sizeof (arr4) );
	printf("%d\n", strlen (arr4));
	return 0;
}

结果如下: 

2021.11.25 关于c语言的数组

sizeof (“a b c d e f \0”)一共七个元素—— 7*1=7

strlrn  (“a b c d e f \0”)“\0”之前6个字符—— 6

示例2如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a', 'b', 'c' };
	printf("%d\n", sizeof(arr1));
	printf("%d\n", sizeof(arr2));
	printf("%d\n", strlen(arr1));
	printf("%d\n", strlen(arr2));
	return 0;
}

结果如下:

2021.11.25 关于c语言的数组

sizeof(arr1)— " a  b  c  \0 " — 4*1=4

sizeof(arr2)— { 'a', 'b', 'c' } — 只有三个元素— 3*1=3

strlen (arr1)—  " a  b  c  \0 " — "\0"之前三个字符—3

strlen (arr2)— { 'a', 'b', 'c' } — 因为strlen是运算到"\0"结束,我们并不知道在元素'c'之后的元素,所以其所打印出来数的应是随机数


关于 sizeof 的基本用途

sizeof是可计算变量、数组、类型的大小的操作符,当我们计算整个数组的大小然后再除以数组中单个元素的大小,便可以得到该数组的元素个数。

举例:(利用这一点我们可以很方便的打印出数组中的各元素)

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
	int sz = sizeof(arr) / sizeof(arr[0]); // 利用 sizeof 计算数组中元素的个数
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

结果为:

2021.11.25 关于c语言的数组


关于一维数组在内存中的储存

举例:(我们先打印出数组中各元素的地址寻找规律)

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]); 
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		printf("arr[%d]=%p\n",i,&arr[i]);
	}
	return 0;
}

结果为:(该地址为16进制)( 0-9  a(10) b(11) c(12) d(13) e(14) f(15))

2021.11.25 关于c语言的数组

我们不难观察出其相邻元素地址之间都相差为4,为整型元素4个字节的大小。 

结论:一维数组在内存中是连续存放的


二维数组

关于二维数组的创建 

2021.11.25 关于c语言的数组

 二维数组中的【3】表示行数,【4】表示列数

注意:1:二维数组的不完全初始化剩下的元素也都默认为0。

           2: 二维数组行可省略,列不可省略。  

示例如下:

2021.11.25 关于c语言的数组 


关于二维数组的打印

我们通过二维数组的下标来进行打印,而二维数组的行和列下标都是从0开始的。

举例:

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	int arr[3][4] = { {1,2,3},{4,5} };
 //         下标 :   0  1  2  3
 //      
 //               0   1  2  3  0 
 //               1   4  5  0  0
 //               2   0  0  0  0
 //
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

关于二维数组在内存中的储存

举例:(我们先打印出数组中各元素的地址寻找规律)(int arr [3][4])

#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS

int main()
{
	int arr[3][4];
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 4; j++)
		{
			printf("arr[%d][%d]=%p\n ",i,j, &arr[i][j]);
		}
	}
	return 0;
}

结果为:

2021.11.25 关于c语言的数组

我们也不难观察出其相邻元素地址之间都相差为4,为整型元素4个字节的大小。

实际二维数组在储存时变为如图形式连续存放

2021.11.25 关于c语言的数组

以上便是关于数组的内容了,喜欢可点个赞或收藏哦!

谢谢浏览!(如有问题,请各位大神即使指出,我会及时纠正!)


上一篇:“21天好习惯“第一期 ——1


下一篇:有序数组查找