目录
一维数组
关于一维数组的创建
数组的[]中要给一个常量才行,不能使用变量。
错误写法:
正确写法:
除整型之外还可创建以下数组:
注意:不完全初始化,剩下的元素默认初始化为0。
示例如下:
关于数组的打印
我们需根据其数组的下标来进行打印,而下标是从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;
}
结果为:
关于“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;
}
结果如下:
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;
}
结果如下:
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;
}
结果为:
关于一维数组在内存中的储存
举例:(我们先打印出数组中各元素的地址寻找规律)
#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))
我们不难观察出其相邻元素地址之间都相差为4,为整型元素4个字节的大小。
结论:一维数组在内存中是连续存放的
二维数组
关于二维数组的创建
二维数组中的【3】表示行数,【4】表示列数
注意:1:二维数组的不完全初始化剩下的元素也都默认为0。
2: 二维数组行可省略,列不可省略。
示例如下:
关于二维数组的打印
我们通过二维数组的下标来进行打印,而二维数组的行和列下标都是从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;
}
结果为:
我们也不难观察出其相邻元素地址之间都相差为4,为整型元素4个字节的大小。
实际二维数组在储存时变为如图形式连续存放
以上便是关于数组的内容了,喜欢可点个赞或收藏哦!
谢谢浏览!(如有问题,请各位大神即使指出,我会及时纠正!)