总结——数组。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结——数组。相关的知识,希望对你有一定的参考价值。

 今天总结数组的相关知识,重点介绍一维数组和二维数组两部分内容。

一、数组的创建。

数组由——类型   数组名   [常量或常量表达式]——构成。

例如:

int arr[10] = {0};

需要特别注意的下标引用操作符中间不能出现变量,

例如:

int m = 10;
int arr[m] = {0};

这种创建数组的方式是错误的!

但是你可以通过 #define 来定义标识符常量。

还要特别注意的是,数组类型不单单指前面的 int 、char 等类型,

也包括后面下标引用操作符中的内容。

二、数组的初始化。

数组初始化有两种情况:

1、不完全初始化,例如:

int arr[10] = {1,2,3};

2、完全初始化,如:

int arr[3] = {1,2,3};
int arr[] = {1,2,3};

三、字符数组。

1、字符数组在创建时有如下方式:

char [3] = { a, 98, c};
char [3] = { a, b, c};
char [] = "abcdef";

现对第三种方式进行讨论:
当用 sizeof() 对数组 arr[] 求大小时,输出的值是7,

具体原因是这种方式会在元素 f 末尾加上一个隐藏的 “\0”,“\0”大小会占一个单位。

如用 strlen() 对数组 arr[] 求长度时,输出的值是6,

这里是因为 strlen() 这个函数在统计时不会统计“\0”。

2、当用指针指向数组时,

char *p = "abcdef";

 sizeof(p)——输出值为4,这里的p为指针,而指针大小为4;

strlen(p)——输出值为6,理由同数组arr中一致。

这里需要注意的是:

char arr1[] = "abcdef";
char arr2[] = "abcdef";
char *p1[] = "abcdef";
char *p2[] = "abcdef";

在使用相等判断条件时,

if (arr1 == arr2);//错误
if (p1 == p2);//正确,p中存放的都是"abcdef"的地址

四、数组注意事项。

1、有两种创建二维数组的情况,如下:

int arr[3][5] = { {1,2}, {4,5}};
int arr[][5] = { {1,2}, {4,5}};//行的信息是可以省略的,而列不行

2、在一维数组中,数组名代表首元素的地址;而在二维数组中,数组名不能代表 arr[0][0] 的地址。

int *p = arr1;//一维数组
int *p = &arr2[0][0];//二维数组

3、arr[i] = *(arr+i) = *(i+arr) = i[arr]

五、数组计算。

1、一维整型数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    int a[] = { 1, 2, 3, 4 };
    printf("%d\n", sizeof(a));//16
    printf("%d\n", sizeof(a + 0));//4
    printf("%d\n", sizeof(*a));//4(首元素)
    printf("%d\n", sizeof(a + 1));//4
    printf("%d\n", sizeof(a[1]));//4
    printf("%d\n", sizeof(&a));//4(取出地址)
    printf("%d\n", sizeof(&a + 1));//4(跳过整个数组)
    printf("%d\n", sizeof(&a[0]));//4
    printf("%d\n", sizeof(&a[0] + 1));//4
    system("pause");
    return 0;
}

2、一维字符数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    char arr[] = { a, b, c, d, e, f };
    printf("%d\n", sizeof(arr));//6
    printf("%d\n", sizeof(arr + 0));//4
    printf("%d\n", sizeof(*arr));//1
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4
    printf("%d\n", sizeof(&arr + 1));//4
    printf("%d\n", sizeof(&arr[0]));//4
    printf("%d\n", sizeof(*&arr));//6
    system("pause");
    return 0;
}

3、一维字符数组的 strlen 相关计算。

    printf("%d\n", strlen(arr));//随机值
    printf("%d\n", strlen(arr + 0));//随机值
    printf("%d\n", strlen(*arr));//错误代码
    printf("%d\n", strlen(arr[1]));//错误代码
    printf("%d\n", strlen(&arr));//随机值
    printf("%d\n", strlen(&arr + 1));//随机值
    printf("%d\n", strlen(&arr[0]));//随机值
    printf("%d\n", strlen(*&arr));//随机值

4、指针访问数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    char *p = "abcdef";
    printf("%d\n", sizeof(p));//4
    printf("%d\n", sizeof(p + 1));//4
    printf("%d\n", sizeof(*p));//1
    printf("%d\n", sizeof(p[0]));//1
    printf("%d\n", sizeof(&p));//4
    printf("%d\n", sizeof(&p + 1));//4(p地址的后面)
    printf("%d\n", sizeof(&p[0] + 1));//4
    system("pause");
    return 0;
}

5、指针访问数组的 strlen 相关计算。

    printf("%d\n", strlen(p));//6
    printf("%d\n", strlen(p + 1));//5
    printf("%d\n", strlen(*p));//错误代码
    printf("%d\n", strlen(p[0]));//错误代码
    printf("%d\n", strlen(&p));//随机值
    printf("%d\n", strlen(&p + 1));//随机值
    printf("%d\n", strlen(&p[0] + 1));//5

6、另一种方式的一维字符数组 sizeof 相关计算。

#include<stdio.h>
int main()
{
    char arr[] = "abcdef";
    printf("%d\n", sizeof(arr));//7
    printf("%d\n", sizeof(arr + 0));//4
    printf("%d\n", sizeof(*arr));//1
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//4
    printf("%d\n", sizeof(&arr + 1));//4
    printf("%d\n", sizeof(&arr[0] + 1));//4
    printf("%d\n", sizeof(*&arr));//7
    system("pause");
    return 0;
}

7、另一种方式的一维字符数组 strlen 相关计算。

    printf("%d\n", strlen(arr));//6
    printf("%d\n", strlen(arr + 0));//6
    printf("%d\n", strlen(*arr));//错误代码
    printf("%d\n", strlen(arr[1]));//错误代码
    printf("%d\n", strlen(&arr));//6
    printf("%d\n", strlen(&arr + 1));//随机值
    printf("%d\n", strlen(&arr[0] + 1));//5

数组名单独放在 sizeof 内部,数组名表示整个数组。

数组名:数组名表示整个数组,&数组名表示数组的地址。

除此之外,所有遇到的数组名都是数组首元素的地址。

8、二维整型数组的 sizeof 相关计算。

#include<stdio.h>
int main()
{
    int a[3][4] = { 0 };
    printf("%d\n", sizeof(a));//48
    printf("%d\n", sizeof(a[0][0]));//4
    printf("%d\n", sizeof(a[0]));//16
    printf("%d\n", sizeof(a[0] + 1));//4(第一行第二个元素地址)
    printf("%d\n", sizeof(a + 1));//4(第二行地址)
    printf("%d\n", sizeof(&a[0] + 1));//4
    printf("%d\n", sizeof(*a));//16
    printf("%d\n", sizeof(a[3]));//16
    system("pause");
    return 0;
}

 


以上是关于总结——数组。的主要内容,如果未能解决你的问题,请参考以下文章

几个关于js数组方法reduce的经典片段

VSCode自定义代码片段—— 数组的响应式方法

VSCode自定义代码片段10—— 数组的响应式方法

python常用代码片段总结

BootStrap有用代码片段(持续总结)

BootStrap实用代码片段(持续总结)