【C 语言】结构体 ( 结构体变量内存操作 | 通过 “ . “ 操作符操作结构体内存空间 | 通过 “ -> “ 操作符操作结构体内存空间 )

简介: 【C 语言】结构体 ( 结构体变量内存操作 | 通过 “ . “ 操作符操作结构体内存空间 | 通过 “ -> “ 操作符操作结构体内存空间 )

文章目录

一、通过 " . " 操作符操作结构体内存空间

二、通过 " -> " 操作符操作结构体内存空间

三、代码示例





一、通过 " . " 操作符操作结构体内存空间


通过 . 操作符操作 结构体 内存空间 , . 操作符 是 寻址操作 , 计算结构体 age 成员距离 距离 t3 变量的偏移量 ;


注意 : 只有 结构体 变量 才能使用 . 操作符 , 指向 结构体 的指针 , 不能使用该操作符 ;


代码示例 :


 

// 通过 . 操作符操作 结构体 内存空间
    Teacher t3;
    // 为 name 结构体成员赋值
    strcpy(t3.name, "Tom");
    // . 操作符 是 寻址操作
    // 计算 age 变量距离 距离 t3 变量的偏移量
    t3.age = 18;
    t3.id = 2;






二、通过 " -> " 操作符操作结构体内存空间


通过 -> 操作符操作 结构体 内存空间 , -> 操作符 是 获取指针指向的内存数据 , 也是寻址操作 , 计算结构体 age 成员距离 距离 t3 变量的偏移量 ;


注意 : 只有 指向 结构体 变量 的指针 才能使用 -> 操作符 , 结构体变量 , 不能使用该操作符 ;


代码示例 :


 

// 通过 -> 操作符操作 结构体 内存空间
    Teacher t4;
    Teacher *p = &t4;
    // 为 name 结构体成员赋值
    strcpy(p->name, "Tom");
    // -> 操作符 是 获取指针指向的内存数据 , 也是寻址操作
    // 计算 age 变量距离 距离 t3 变量的偏移量
    p->age = 18;
    p->id = 3;






三、代码示例


代码示例 :


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
 * @brief The Teacher struct
 * 定义 结构体 数据类型 , 同时为该结构体类型声明 别名
 * 可以直接使用 别名 结构体变量名 声明结构体类型变量
 * 不需要在前面添加 struct 关键字
 */
typedef struct Teacher
{
    char name[20];
    int age;
    int id;
}Teacher;
/**
 * @brief main
 * @return
 */
int main()
{
    // I. 通过 . 操作符操作 结构体 内存空间
    Teacher t3;
    // 为 name 结构体成员赋值
    strcpy(t3.name, "Tom");
    // . 操作符 是 寻址操作
    // 计算 age 变量距离 距离 t3 变量的偏移量
    t3.age = 18;
    t3.id = 2;
    // 打印 t3 结构体
    printf("%s , %d , %d\n", t3.name, t3.age, t3.id);
    // II. 通过 -> 操作符操作 结构体 内存空间
    Teacher t4;
    Teacher *p = &t4;
    // 为 name 结构体成员赋值
    strcpy(p->name, "Tom");
    // -> 操作符 是 获取指针指向的内存数据 , 也是寻址操作
    // 计算 age 变量距离 距离 t3 变量的偏移量
    p->age = 18;
    p->id = 3;
    // 打印 t4 结构体
    printf("%s , %d , %d\n", t4.name, t4.age, t4.id);
    // 命令行不要退出
    system("pause");
    return 0;
}


执行结果 :


Tom , 18 , 2
Tom , 18 , 3
请按任意键继续. . .

image.png


目录
相关文章
|
6月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
540 55
|
4月前
|
安全 C语言 C++
比较C++的内存分配与管理方式new/delete与C语言中的malloc/realloc/calloc/free。
在实用性方面,C++的内存管理方式提供了面向对象的特性,它是处理构造和析构、需要类型安全和异常处理的首选方案。而C语言的内存管理函数适用于简单的内存分配,例如分配原始内存块或复杂性较低的数据结构,没有构造和析构的要求。当从C迁移到C++,或在C++中使用C代码时,了解两种内存管理方式的差异非常重要。
149 26
|
4月前
|
安全 C语言
C语言中的字符、字符串及内存操作函数详细讲解
通过这些函数的正确使用,可以有效管理字符串和内存操作,它们是C语言编程中不可或缺的工具。
267 15
|
7月前
|
C语言
C语言中条件操作符的应用
最后,条件操作符是个超级英雄,但不是每个代码问题都需要一个超级英雄来解决。一定要在适当的时候适度的使用它,那么它将成为你的编程工具箱中的一件强力工具。
324 75
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
8月前
|
SQL 存储 缓存
【赵渝强老师】达梦数据库的内存结构
本文介绍了达梦数据库管理系统的内存结构,包括内存池、缓冲区、排序区和哈希区。内存池分为共享内存池和运行时内存池,能够提高内存申请与释放效率,并便于监控内存使用情况。缓冲区涵盖数据缓冲区、日志缓冲区、字典缓冲区和SQL缓冲区,用于优化数据读写和查询性能。排序区和哈希区分别提供排序和哈希连接所需的内存空间,通过合理配置参数可提升系统效率。文内附有具体配置示例及视频讲解,帮助用户深入理解达梦数据库的内存管理机制。
206 0
|
11月前
|
存储 编译器 程序员
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
在C语言中,内存布局是程序运行时非常重要的概念。内存布局直接影响程序的性能、稳定性和安全性。理解C程序的内存布局,有助于编写更高效和可靠的代码。本文将详细介绍C程序的内存布局,包括代码段、数据段、堆、栈等部分,并提供相关的示例和应用。
368 5
【C语言】内存布局大揭秘 ! -《堆、栈和你从未听说过的内存角落》
|
11月前
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
675 7
|
11月前
|
存储 缓存 算法
【C语言】内存管理函数详细讲解
在C语言编程中,内存管理是至关重要的。动态内存分配函数允许程序在运行时请求和释放内存,这对于处理不确定大小的数据结构至关重要。以下是C语言内存管理函数的详细讲解,包括每个函数的功能、标准格式、示例代码、代码解释及其输出。
377 6
|
4月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
1095 0

热门文章

最新文章

下一篇
开通oss服务