iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言中的#pragma pack(1)如何使用
  • 252
分享到

C语言中的#pragma pack(1)如何使用

2023-07-05 04:07:33 252人浏览 独家记忆
摘要

这篇“C语言中的#pragma pack(1)如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的#pragma

这篇“C语言中的#pragma pack(1)如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的#pragma pack(1)如何使用”文章吧。

一:何时使用

#pragma pack(1)的用法大多是用在结构体中

二. 为什么使用#pragma pack(1)

结构体的字节对齐方式在不同的编译器中不同,会存在数据冗余,以下举个例子

 struct example    {        char header_start;        double data_type;    };

现有的结构体,就会按照结构体成员中最大的数据类型对齐,例子当中就是double型,按照8个字节进行对齐。那么此时sizeof(example)就是16,存在7个空字节,因为其中char只占一个字节

如果加上#pragma pack(1),那么example按1个字节对齐方式对齐,此时sizeof(example)就是等于9

三.注意点

这种方法的使用一定要是成对使用,如下面例子

#pragma pack(1)struct example    {        char header_start;        double data_type;    };#pragma pack()

我们一定要在结构体末尾加上#pragma pack()进行取消自定义字节对齐的命令,如果不取消,可能会导致整个程序存在问题。因为会影响到其他的结构体对齐方式

四.#pragma pack()的一些用法

#pragma pack(show) //显示当前内存对齐的字节数,编辑器默认8字节对齐

#pragma pack(n) //设置编辑器按照n个字节对齐,n可以取值1,2,4,8,16

#pragma pack(push) //将当前的对齐字节数压入栈顶,不改变对齐字节数

#pragma pack(push,n) //将当前的对齐字节数压入栈顶,并按照n字节对齐

#pragma pack(pop) //弹出栈顶对齐字节数,不改变对齐字节数

#pragma pack(pop,n) //弹出栈顶并直接丢弃,按照n字节对齐

五.题目

牛牛需要建立一个结构体Nowcoder,该结构体包括三个成员,其类型分别是int、double和char。假设牛牛想让这个结构体所占据的内存最小,请问你该怎么建立该结构体?(输入三个相应类型的变量用于初始化结构体)

示例1

输入:1,1.000,a
返回值:13

代码

  #pragma pack(1)struct Nowcoder{    char c;    int n;    double d;}; int smaller_space(int n, double d, char c ) {    // write code here    struct Nowcoder temp;    temp.c=c;    temp.n=n;    temp.d=d;    return sizeof(temp);}

附:C语言慎用#pragma pack(1)命令

在我们在按字节传输一些数据的时候,肯定会定义一些结构体,但是结构体的字节对齐方式可能在不同的编译器中不一样,这样会在数据传输过程中增加冗余的数据。

为了方便数据传输,我们可以用#pragma pack(1)命令,将结构体里的变量强制进行1字节对齐,但是我们在用完这个命令后,一定要在定义的数个结构体后加一个取消自定义字节对齐的命令:#pragma pack(),如果不取消就可能导致整个程序都会有问题,因为这个命令会影响到其它的结构体的字节对齐方式,但并不会全部全部影响(推测)。正确用法是:

#pragma pack(1)typedef struct{.......} xxxxx;typedef struct{.......} xxxxx;........#pragma pack()

以上就是关于“C语言中的#pragma pack(1)如何使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网其他教程频道。

--结束END--

本文标题: C语言中的#pragma pack(1)如何使用

本文链接: https://www.lsjlt.com/news/349572.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言中的#pragma pack(1)如何使用
    这篇“C语言中的#pragma pack(1)如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言中的#pragma...
    99+
    2023-07-05
  • C语言中#pragma pack(1)的用法与注意点
    目录一:何时使用二. 为什么使用#pragma pack(1)三.注意点四.#pragma pack()的一些用法五.题目附:C语言慎用#pragma pack(1)命令总结一:何时...
    99+
    2023-02-21
    c语言 #pragma pack(1) c语言中pragma怎么用 pragma使用例子pack
  • C语言中#pragma once的作用
    目录1、#pragma once有什么作用?2、两者的使用方式有何区别?3、两者各有何特点?(1)#ifndef(2)#pragma once4、两者之间有什么联系?1、#pragm...
    99+
    2024-04-02
  • C语言pragma函数怎么使用
    在C语言中,`#pragma`是一个预处理指令,用于向编译器发出特定的指令。`#pragma`指令的具体形式和功能因编译器而异,但通...
    99+
    2023-08-08
    C语言 pragma
  • C语言详细讲解#pragma的使用方法
    目录一、#pragma 简介二、#pragma message三、#pragma once四、#pragma pack五、小结一、#pragma 简介 #pragma 用于指示编译器...
    99+
    2024-04-02
  • c语言pragma的用法是什么
    `#pragma` 是一个编译指令,用于告诉编译器执行特定的操作或者设置特定的编译选项。在C语言中,`#pragma` 可以用于以下...
    99+
    2023-09-04
    c语言
  • C语言 详细讲解#pragma的使用方法
    #pragma是C语言中的预处理指令,用于告诉编译器在编译过程中采取特定的行为。以下是#pragma的使用方法的详细讲解:1. #p...
    99+
    2023-08-08
    C语言
  • C语言如何求1到100的和
    这篇文章主要讲解了“C语言如何求1到100的和”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何求1到100的和”吧!题目:求1+2+3+……+98+99+100(1)用数学方法求解(...
    99+
    2023-06-17
  • C语言中如何使用static
    这篇文章主要介绍C语言中如何使用static,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.static 可以修饰局部变量首先让我看看这段代码#include<stdio.h>void tes...
    99+
    2023-06-22
  • C语言中const如何使用
    这篇文章给大家介绍C语言中const如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。const可以说一种常量的声明的关键字,如const int a=2;变量a就是一个常变量,a的值不能被改变,这个改变是一定意义...
    99+
    2023-06-17
  • c语言中string如何使用
    在C语言中,可以使用字符数组来表示字符串。在声明字符串时,可以使用字符数组来存储字符串的每一个字符,并以空字符'\0'作为字符串的结...
    99+
    2023-10-28
    c语言
  • c语言中default语句如何使用
    在C语言中,default语句用于switch语句中的默认情况。当没有任何一个case匹配时,会执行default语句块中的代码。 ...
    99+
    2023-10-28
    c语言
  • memset在c语言中如何使用
    在C语言中,`memset`函数用于将内存块的内容设置为指定的值。`memset`函数的原型如下:```cvoid *memset(...
    99+
    2023-09-28
    memset c语言
  • C语言的continue如何使用
    这篇“C语言的continue如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言的continue如何使用”文章吧...
    99+
    2023-07-04
  • return在c语言中如何使用
    在C语言中,return语句用于将函数的执行结果返回给调用函数。它的一般语法如下所示:```creturn 表达式;```其中,`表...
    99+
    2023-09-08
    c语言 return
  • C语言中如何使用链表
    这篇文章主要介绍C语言中如何使用链表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、结构体的概念比如说学生的信息,包含了学生名称、学号、性别、年龄等信息,这些参数可能有些是数组型、字符型、整型、甚至是结构体类型的数...
    99+
    2023-06-29
  • C语言中如何使用指针
    这篇文章将为大家详细讲解有关C语言中如何使用指针,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。指针总结部分笔记来源于王道C语言训练营指针:变量的地址指针变量:一个变量专门用来存放另一变量的地址1.指针的本...
    99+
    2023-06-25
  • scanf在c语言中如何使用
    scanf 函数用于从标准输入读取数据,根据指定的格式字符串,将数据存储到相应变量中。具体步骤包括:指定格式字符串,定义读取数据的格式和变量类型。提供变量指针,传递变量地址以存储读取的数...
    99+
    2024-04-29
    c语言
  • C语言中如何使用do-while语句
    这篇文章给大家介绍C语言中如何使用do-while语句,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容。C...
    99+
    2023-06-16
  • C语言中的结构体如何使用
    本篇内容介绍了“C语言中的结构体如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!结构体的声明结构体的定义:结构体是一些值的集合,这些值...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作