今天学习C语言中的数据类型的本质与变量的本质

文章目录

  • 1 什么是数据类型
  • 2 变量的本质
  • 3 数据类型与变量的关系
  • 4 自定义数据类型与创建变量
  • 5 总结

1 什么是数据类型

  • 数据类型可以理解为固定内存大小的别名
  • 数据类型是创建变量的模子

如同下面的图示,各个数据类型是代表了某一个固定大小的内存,数据类型是这块内存的别名。

然后,当我们要创建一个变量时,就使用上述的基本数据类型为模子,产生一个新的变量,如下图所示:

这些新的变量,是根据基本数据类型这个模子,来刻画变量所占用的内存空间的大小。

2 变量的本质

变量的本质是什么?

  • 变量是一段实际连续存储空间的别名,注意与基本数据类型的不同,基本数据类型是一段连续存储空间的别名,但是它不是任何一个实际的存储空间,它相当于一种规则。
  • 程序中通过变量来申请并命名存储空间,
  • 申请存储空间后,使用变量的名字可以使用该存储空间

如下图所示,即,i,j,k为普通的变量(在这里是int类型的变量),p也是一个变量,但是它是指针变量(指针后面会深度学习)

3 数据类型与变量的关系

  • 上面的学习中发现,变量可以看成是数据类型的一种具体化。变量所对应的数据类型,它们两个所占用存储空间的字节数是相等的。具体看下面的例子:

  • 1-1.c

#include <stdio.h>int main()
{char c = 0;short s = 0;int i = 0;printf("%d, %d\n", sizeof(char), sizeof(c));printf("%d, %d\n", sizeof(short), sizeof(s));printf("%d, %d\n", sizeof(int), sizeof(i));return 0;
}

编译运行程序:

  • gcc 1-1.c
  • ./a.out

运行结果为:

4 自定义数据类型与创建变量

我们还可以自定义数据类型,然后使用自定义的数据类型来创建变量。如下代码:

1-2.c

#include <stdio.h>typedef int INT32;
typedef unsigned char BYTE;
typedef struct _tag_ts
{BYTE b1;BYTE b2;short s;INT32 i;
} TS;int main()
{INT32 i32;BYTE b;TS ts;printf("%d, %d\n", sizeof(INT32), sizeof(i32));printf("%d, %d\n", sizeof(BYTE), sizeof(b));printf("%d, %d\n", sizeof(TS), sizeof(ts));return 0;
}
  • 编译运行的结果为:

5 总结

  • 数据类型的本质是一个模子
  • 数据类型代表需要占用内存的大小
  • 变量的本质是一段内存的别名
  • 变量隶属于某一种数据类型
  • 变量所在的内存的大小取决于其所属的数据类型的大小

【C语言进阶深度学习记录】一 数据类型的本质与变量的本质相关推荐

  1. 【C语言进阶深度学习记录】八 C语言中void的分析

    文章目录 1 void的意义 1.1 不存在void变量 1.2 C标准 1.3 void指针的意义 1.4 通过void* 实现memset函数 2 总结 1 void的意义 void修饰函数的参数 ...

  2. 【C语言进阶深度学习记录】三十八 C/C++语言中的函数声明与函数定义

    文章目录 1 函数的声明和定义 1.1 代码分析 2 总结 1 函数的声明和定义 声明的意义在于告诉编译器程序单元的存在.只是告诉编译器它存在但是不在声明这里定义,有可能在当前文件中的其他地方或者其他 ...

  3. 【C语言进阶深度学习记录】三十五 程序中的堆、栈以及静态存储区(数据区)

    学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 在我之前学习底层的知识的时候,也写过相关的内容.可以对比的学习:[软 ...

  4. 【C语言进阶深度学习记录】二十六 C语言中的字符串与字符数组的详细分析

    之前有一篇文章是学习了字符和字符串的,可以与之结合学习:[C语言进阶深度学习记录]十二 C语言中的:字符和字符串 文章目录 1 字符串的概念 1.1 字符串与字符数组 1.2 字符数组与字符串代码分析 ...

  5. 【C语言进阶深度学习记录】十九 #pragma使用与分析

    文章目录 1 #pragma 概念简介 1.1 #pragma message 的用法 1.2 #pragma once 的用法 1.3 #pragma pack 的用法 1.31 struct占用的 ...

  6. 【C语言进阶深度学习记录】十六 静态库与动态库的创建与使用

    上一篇文章学习了编译的过程,点击链接查看:[C语言进阶深度学习记录]十五 编译过程简介,每一个C源文件编译后将会生成目标文件,那么这些目标文件,还需要链接起来,生成可执行文件. 文章目录 1 链接的意 ...

  7. 【C语言进阶深度学习记录】五 C语言中变量的属性

    上一篇文章学习了C语言中的类型转换,点击链接查看:[C语言进阶深度学习记录]四 C语言中的类型转换. 文章目录 1 C语言的变量属性 1.1 auto关键字 1.2 register关键字 1.3 s ...

  8. 【C语言进阶深度学习记录】十七 宏定义的使用与分析

    文章目录 1 C语言中的宏定义 1.1 定义宏常量 1.2 宏定义表达式 1.3 宏表达式与函数的对比 1.4 宏表达式的作用域 2 C语言中的内置宏 3 宏定义的代码综合示例 4 总结 1 C语言中 ...

  9. 【C语言进阶深度学习记录】九 C语言中const的详细分析

    文章目录 1 const的分析 2 const本质的分析实验 2.1 代码案例分析 3 const修饰函数参数和返回值时的情况 3.1 代码案例分析 4 总结 1 const的分析 不管是C语言还是C ...

最新文章

  1. bzoj 3100 排列
  2. Silverlight编程模型
  3. web项目性能优化--网络、js、渲染
  4. 使用Java中的Try-With-Resource
  5. stm32cubeide外部中断_【STM32】HAL库 STM32CubeMX教程三----外部中断(HAL库GPIO讲解)
  6. DDD领域驱动设计理论篇 - 学习笔记
  7. python关闭文件的函数_python打开与关闭文档
  8. vfp中treeview右键菜单_用卓语言程序把Sublime Text 3添加到和删除出右键菜单
  9. 使用 requests 进行身份认证
  10. python写刷课脚本_python opencv 知到 刷课 脚本
  11. CUDA10,Torch安装解决NOTFOUND CUDA_cublas_device_LIBRARY,Ubuntu16.04安装torch遇到的错误
  12. opendevops_codo项目研究
  13. 【转载】VS2019使用技巧
  14. android手机最低内存,安卓想用很久不卡顿?12GB内存是最低标准,这6款硬核配置还便宜...
  15. 第 5 章 ROS 常用组件 4 —— rosbag / rqt工具箱
  16. 三、Fiddler抓包工具 — Fiddler页面布局之菜单栏
  17. 【Designing ML Systems】第 10 章 :MLOps 的基础设施和工具
  18. 【题】【矩阵】NKOJ 1901 喜欢奇数的面包师
  19. 英语对话计算机,关于计算机的英语对话
  20. 修复usb和联网功能的pd17虚拟机mac版 v17.1.2(支持12系统)

热门文章

  1. Java:这是一份全面 详细的 Synchronized关键字 学习指南
  2. 第十四期:5 个 JS 不良编码习惯,你占几个呢?
  3. 计算机操作系统(1):OS的作用和目标
  4. python之sys
  5. DA模拟量控制外接600V高压直流源-设计分析
  6. feign接口调用出现连接超时
  7. [Gamma阶段]展示博客
  8. scratch少儿编程第一季——07、人要衣装佛靠金装——外观模块
  9. 【NOIP2017模拟6.25】小W的动漫
  10. mac 删除垃圾篓中的文件