数组的本质

Posted yanyun888

tags:

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

数组的概念

数组是相同类型的变量的有序集合
技术分享图片

数组的大小

  • 数组在一片连续的内存空间中存储元素
  • 数组元素的个数可以显示或隐式指定

例子1:数组的初始化

#include<stdio.h>
int main()
{
    int a[5] = {1,2};
    int b[] = {1,2};
    
    printf("a[2] = %d
",a[2]);
    printf("a[3] = %d
",a[3]);
    
    printf("sizeof(a) = %d
",sizeof(a));
    printf("sizeof(b) = %d
",sizeof(b));

    return 0;
}

数组地址与数组名

  • 数组名代表数组首元素的地址
  • 数组的地址需要用取地址符&才能得到
  • 数组首元素的地址值与数组的地址值相同
  • 数组首元素的地址与数组的地址是两个不同的概念

数组名的盲点

  • 数组名可以看做一个常量指针
  • 数组名“指向”的是内存中数组首元素的起始位置
  • 数组名不包含数组的长度信息
  • 在表达式中数组名只能作为右值使用
  • 只有在下列场合中数组名不能看做常量指针
    • 数组名作为sizeof操作符的参数
    • 数组名作为&运算符的参数

例子2:数组和指针的不同

#include<stdio.h>

int main()
{
    int a[5] = {0};
    int b[2];
    int* p = NULL;
    
    p = a;
    
    printf("a = %p
",a);
    printf("p = %p
",p);
    printf("b = %p
",b);

    return 0;
}

小结

  • 数组是一片连续的内存空间
  • 数组的地址和数组首元素的地址意义不同
  • 数组名在大多数情况下被当成常量指针处理
  • 数组名其实并不是指针,不能将其等同于指针

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

# Java 常用代码片段

# Java 常用代码片段

web代码片段

错误代码:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象和允许未设置片段的选项开头。”

javascript常用代码片段

为什么我不能在此片段中生成唯一对象数组?