当前位置: 首页 > article >正文

C语言串讲-2之指针和结构体

计算机组成:冯 诺依曼架构

编写程序:高级语言 硬件执行:机器语言(一种非常底层、特定的指令集)

机器语言:计算机可以将二进制代码存储在内存中,并且执行这些代码。 二进制位:也称为位(bit), 基数为2 的数字中的 0 或 1,它是信息的基本组成元素。 指令:计算机硬件所能理解并服从的命令(也是二进制位串)。

在计算机内部,指令和数据并没有本质的区别,它们都是以二进制形式存储的。

汇编语言:以助记符形式表示的机器指令。

高级语言:高级编程语言 C+ +、 Java 等可移植的语言,由一些单词和代数符号组成,可以由编译器转换为汇编语言。

存储器容量

在描述存储容量:1bit 1byte(1B) 1KB 1MB 1GB 1TB

在存储器,一个二进制位称为1bit。 1B:字节,1B=8bit

1B 1KB 1MB 1GB 1TB 由小到大,换算单位是2^10

数据类型

数据类型:定义内存空间⼤⼩的⼀个代名词,⽅便编译器能够合理的转换为对应的指令来操作内存空间。

以64位系统为例: char 1B int 4B long long 8B float 4B double 8B

一个特殊的数据类型,指针,是存放数据的内存单元地址。

指针

为了便于管理,存储器中,以8位(1字节)的大小构成一个存储单元。 计算机系统的内存拥有大量的存储单元,每个存储单元的大小为1字节,为了便于管理,必须为每个存储单元编号,该编号就是存储单元的“地址”,每个存储单元拥有一个唯一的地址。

内存地址通常以十六进制形式给出。

存储内存地址的变量就是指针类型的。

64位系统中 指针类型 占 8B

为什么需要指针?

1.在不同区域之间的代码可以共享数据(直接通过指针指向相同的内存空间),特别是结构体,一个结构体中有很多数据,一个结构体变量就会占用大量空间。用指针去共享节省时间和内存。

2.指针占用的字节数是相同的。在(硬件/操作系统)数据存储按字节存储的。指针不同于一般变量,存的是变量的地址,在同一架构下地址长度都是相同的,所有不同类型的指针长度都一样。一般32位系统,指针长度为4个字节,64位则是8个字节。

3.一些操作必须使用指针, 例如申请内存。。。malloc :(void*)malloc(sizeof)

ig:(int *)malloc(size)

4.可以用指针搞一些复杂的结构-链表/树/图。。多重指针(二级指针)

变量名和(指针)地址的关系:学校名和详细地址

结构体

1数组允许定义可存储相同类型数据项的变量。 结构体是C编程中另一种用户自定义的可用的数据类型,它允许存储不同类型的数据项.

struct:声明结构体的关键字

tag 是结构体标签,是一个可选的标志,它是用来引用该结构体的快速标记。

member-list 是标准的变量定义,比如 int i; 或者 float f,或者其他有效的变量定义。

成员后面用分号;隔开,结构类型定义的末尾也有个分号;

variable-list 结构变量,是可选的,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。

结构体变量的声明/定义

1、类型定义和变量声明分开

2、类型定义的同时声明变量

结构体:指针与结构体

结构体指针: 结构体中的变量在内存中连续存放,结构体指针指向第一个变量。 C 语言中,我们可以使用 sizeof 运算符来计算结构体的大小,sizeof 返回的是给定类型或变量的字节大小。对于结构体,sizeof 将返回结构体的总字节数,包括所有成员变量的大小以及可能的填充字节。

访问成员变量:用“.”还是“->” 结构体变量,用 “.” 结构体指针变量,用 “->”


http://www.kler.cn/a/392086.html

相关文章:

  • rockylinux 8安装 gcc11.2
  • 【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-最大的数
  • 腾讯云nginx SSL证书配置
  • Day09 C++ 存储类
  • yolov7论文翻译
  • 记录日志中logback和log4j2不能共存的问题
  • 2024 ECCV | DualDn: 通过可微ISP进行双域去噪
  • ubuntu20.04 解决Pycharm没有写入权限,无法通过检查更新更新的问题
  • k8s中基于overlay网络和underlay网络的网络插件分别有哪些
  • ima.copilot-腾讯智能工作台
  • react 中 FC 模块作用
  • int溢出值(c基础)
  • next中服务端组件共享接口数据
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 2025年使用 AI 识别解决 reCAPTCHA
  • spring-IOC使用注解
  • Python的面向对象
  • SpringBoot+Vue,尽享个性化音乐推荐与分享的网站
  • 揭秘均值抽样分布:因果推断的统计学基础
  • 如何在 Spring Boot 中启用定时任务
  • 【银河麒麟】时间同步工具chrony与ntp对比
  • golang分布式缓存项目 Day2 单机并发缓存
  • labview拆解日期字符串
  • 【大数据学习 | HBASE高级】mr操作hbase
  • MySQL技巧之跨服务器数据查询:基础篇-更新语句如何写
  • 音视频入门基础:MPEG2-TS专题(3)——TS Header简介