码迷,mamicode.com
首页 > 编程语言 > 详细

数组的本质

时间:2018-06-22 14:41:25      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:位置   隐式   printf   code   img   []   连续   src   stdio.h   

数组的概念

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

数组的大小

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

例子1:数组的初始化

#include<stdio.h>
int main()
{
    int a[5] = {1,2};
    int b[] = {1,2};
    
    printf("a[2] = %d\n",a[2]);
    printf("a[3] = %d\n",a[3]);
    
    printf("sizeof(a) = %d\n",sizeof(a));
    printf("sizeof(b) = %d\n",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\n",a);
    printf("p = %p\n",p);
    printf("b = %p\n",b);

    return 0;
}

小结

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

数组的本质

标签:位置   隐式   printf   code   img   []   连续   src   stdio.h   

原文地址:https://www.cnblogs.com/yanyun888/p/9213161.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!