C 语言内存四区 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言内存四区 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )相关的知识,希望对你有一定的参考价值。





一、数据类型



" 数据类型 " 是 数据的抽象 ;

相同类型的数据 , 表示形式相同 , 存储格式相同 , 相关操作相同 ;

C 语言程序中的 数据 , 必定属于某种 数据类型 ;


数据类型分为 简单数据类型 和 复杂数据类型 ;

  • 简单数据类型 :
    • 基本数据类型 : C 语言中有 6 6 6 种基本数据类型 ;
      • 整型 : short , int ;
      • 浮点型 : float 单精度浮点 , double 双精度浮点 ;
      • 字符型 : char ;
      • 空类型 : void ;
    • 用户自定义类型 : enum 枚举类型
  • 复杂数据类型 :
    • 结构类型 :
      • 数组类型 : [] ;
      • 结构体类型 : struct ;
      • 联合体类型 : union ;
      • 类 : class ;
    • 指针类型 : * ;




二、数据类型本质 ( 数组地址 | 数组首元素地址 )



数据类型 本质 : 固定大小 内存块 的 别名 ;


如下代码 :

int a;

编译器 一旦看到 int 类型变量 , 就知道需要分配 4 字节内存 , 用于存储该变量 ;

int array[10];

告诉 C 语言编译器 分配 40 直接内存 ;

打印上述数组 array , array + 1 , &array , &array + 1 的值 ,

#include <stdio.h>

int main()

    int array[10];

    printf("array = %d, array + 1 = %d, &array = %d, &array + 1 = %d",
           array,
           array + 1,
           &array,
           &array + 1);

    return 0;


执行结果 :

array = 6422184, array + 1 = 6422188, &array = 6422184, &array + 1 = 6422224

发现 array&array 的值相等 , 但是这二者所代表的数据类型不同 ;

  • array 代表 数组首元素地址 ;
  • &array 代表 数组地址 ;

array + 1&array + 1 的值相差 40 40 40 字节 , 也就是整个数组的大小 ;

  • array + 1 表示 数组首元素地址 加上一个 数组元素 占据的内存大小 ;
  • &array + 1 表示 数组地址 加上一整个 数组 占据的内存大小 ;

数组数据类型 :

  • 定义 数组类型
  • 定义 数组指针类型
  • 数组类型 和 数组指针类型 的关系 :

以上是关于C 语言内存四区 ( 数据类型 | 数据类型本质 | 数组地址 | 数组首元素地址 )的主要内容,如果未能解决你的问题,请参考以下文章

C++ 数据类型提高+内存四区

C 提高1 内存四区 变量本质 栈开口方向 指针铁律1

C语言提高内容目录

C语言内存四区

C 语言数据类型本质 ( sizeof 函数 | 数据类型大小 )

零基础学C语言知识总结十一:C语言的内存四区