首页 > 其他分享 >c语言·其四

c语言·其四

时间:2024-09-10 09:15:44浏览次数:10  
标签:10 语言 int char printf 对齐 sizeof 其四

sizeof

sizeof是关键字,作用:某个类型有几个字节

printf("%d\n",sizeof(char));   1

printf("%d\n",sizeof(short int));  2

printf("%d\n",sizeof(int));     4

printf("%d\n",sizeof(long int));  4

printf("%d\n",sizeof(__int64));  8

printf("%d\n",sizeof(float));  4

printf("%d\n",sizeof(double));  8

———————————————————————————————————————

char arr1[10] = {0};  

short arr2[10] = {0};  

int arr3[10] = {0};  

printf("%d\n",sizeof(arr1));  10

printf("%d\n",sizeof(arr2));  20

printf("%d\n",sizeof(arr3));  40

—————————————————————————————————————————

char arr1[10] = {0};  

short arr2[10] = {0};  

int arr3[10] = {0};  

printf("%d\n",sizeof(arr1[10]));1         下标为10的一个元素

printf("%d\n",sizeof(arr2[10]));  2

printf("%d\n",sizeof(arr3[10]));  4

数据对齐

本质:效率还是空间,二选一的结果.   

#pragma pack的基本用法为:  

#pragma pack( n )  

结构体。。。  

#pragma pack( )  

 

对齐参数:n为字节对齐数,其取值为1、2、4、8,默认是8。      

1.如果这个值比结构体成员的sizeof值小,那么该成员的偏移量应该以此值为准,      

即是说,结构体成员的偏移量应该取二者的最小值.      

2.若总字节数不是n的倍数,则要补成二的倍数

 

#pragma pack(1) 

struct Test 

     int a ; 

     __int64 b ; 

     char c ; 此时以1为准

}; 

#pragma pack() 

当一字节分配时,_int64在空间中是以上图分配

对齐原则:(是系统默认对齐参数的对齐原则)              

原则一:数据成员对齐规则:结构的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始

(比如int在32位机为4字节,则要从4的整数倍地址开始存储).                

原则二:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。      

原则三:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。          

(struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储.)                 

原则四:对齐参数如果比结构体成员的sizeof值小,该成员的偏移量应该以此值为准.          

也就是说,结构体成员的偏移量应该取二者的最小值.         

struct S1  

{  

 char a; 

 int b; 

 char c; 

};  

a 0 0 0

b b b b

c 0 0 0

struct S2  

{  

 int a; 

 char b; 

 char c; 

};  

a a a a

b c 0 0 四的整数倍

int a 

__int64 b 

char c

a a a a 0 0 0 0

b b b b b b b b

c 0 0 0 0 0 0 0八的整数倍

 

建议:    

按照数据类型由小到大的顺序进行书写   (节省空间)

typedef        

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。

这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。     

eg:

1、对已有类型定义别名  

typedef unsigned char BYTE;           

2.数组类型的定义格式  

typedef int vector[10];  定义一个int型数组叫vector

int main(int argc, char* argv[])  

{  

 vector v; vector赋名为v

 v[0] = 1; 

 v[1] = 2; 

 v[2] = 3; 

 v[3] = 4; 

 v[4] = 5; 

 return 0; 

}  

3.结构体的定义格式  

typedef struct student  

{  

 int x; 

 int y; 

}stu;  student改名为stu

 

strcpy

strcpy自动补零

strcpy(s.arr,"china");

switch

1、switch语句 是if语句的简写  

switch(表达式)       switch后面表达式必须为整型

{  

  case 常量表达式1: case后面必须是常量表达式  

           语句;

           break;

 case 常量表达式2: case后常量表达式的值不能一样  

         语句;

         break;

 default:      以上条件不成立,则输出

         语句;

         break;

}  

———————————————————————————————————————

 

 mov    eax,duord ptr [ebp+8]参数,eax=2

mov      duord ptr [ebp-4],eax局部变量,ebp-4等于2

cmp      dword ptr [ebp-4],1与1做比较

je          Function+32h (0840d7e2)je:等于1就跳转

。。。。。。。。。。。。。。。。

jmp      Function+50h(0040d80f)当不等于1,2,3时,跳转

004D7E2     push       offset string "1"(00422fa4)

                    call     printf (0840dóa9)

                    add     esp,4 

0040D80F     push     offset string "5" (00422F9C)

                    call     printf (004d6a0)

                    add     esp,4

——————————————————————————————

31;28

 

 

 

 

 

标签:10,语言,int,char,printf,对齐,sizeof,其四
From: https://www.cnblogs.com/yuli10952/p/18392138

相关文章

  • C语言阶段练习题
    题目一:(25分)题目描述:输入终值,输出所有能被7整除的数值及其和数据展示: 代码展示:#include<stdio.h>#include<string.h>#include<stdlib.h>intmain(intargc,constchar*argv[]){inta,sum=0,m=0;         //定义输入值,求和值,以及判断换......
  • PHP 程序员学会了 Go 语言就能唬住面试官吗?
    大家好,我是码农先森。唬住了50k,唬不住就5k。这句话一直是PHP程序员之间相互吹捧、吹牛逼的笑点,每次面试过后都会挠挠头上仅剩的几根头发,回想自己是否吹牛逼会过了头。我经常在微信程序员撕逼群里,看到群友因为某个技术点而争执不休,时而讨论这个技术能不能在面试过程中突出自......
  • 【Rust】Mdbook插件开发和分享——多图浏览和多语言代码
    mdbook-image-slider受DevExpress文档多图浏览的启发,我开发这个插件,在查看多个图片和图片的描述的时候非常方便项目地址:https://github.com/VinciYan/mdbook-image-slider.git特点鼠标置于图片查看区域时显示切换图片按钮鼠标点击图片可以缩放查看,移动端支持点击图片进行缩......
  • C语言 结构体
    一,什么是结构体结构体(struct)是一种用户用户的定义类型,它允许将多个不同类型的数据组合在一起,形成一个复合的数据类型。结构体通常用于表示一个具有多种属性的实体,例如一个学生的姓名,学号,年龄,成绩等等。在c语言中,结构体的定义通常包括以下几个部分1.名称:结构体标识符,用于引用该结构......
  • C语言程序设计-练习篇
    不知道结果仍义无反顾地才是勇士。三,打印整数二进制的奇数位和偶数位题目内容:获取一个整数二进制序列中所有的奇数位和偶数位,分别打印出二进制序列#include<stdio.h>//打印整数二进制的奇数位和偶数位intmain(){ inti=0; intnum=0; scanf("%d",&num); //......
  • C语言中数组的知识(后面有三子棋小游戏)
    一、数组的创建和初始化    数组是一组同类型元素的集合,合理运用数组可以帮我们完成一些复杂的操作    1.1一维数组的创建和初始化    一维数组创建的方式:type_tarr_name[const_n];//type_t是指数组的元素类型//const_n是一个常量表达式,用......
  • 企业网站管理系统(多语言)V1.3.2
    企业网站管理系统,支持自定义多语言、自定义模型与字段、自定义表单等功能。提供全部无加密源代码,支持私有化部署。V1.3.2切换语言后获取配置错误的问题优化:2024模板若干问题优化:上一页、下一页标签增加order排序属性修复:重要切换语言后获取配置错误的问题(建议升级)修复:后台api翻译功......
  • 贪吃蛇项目实现(C语言)——附源码
    前言贪吃蛇是一款十分经典的游戏,其通过控制贪吃蛇的上下左右移动来吃食物,延长自己的身体,也会因为撞到墙体和自身而死亡。下面我们通过C语言来实现贪吃蛇。1.技术要点C语言枚举,结构体,链表,动态内存管理,预处理指令,函数,Win32API等。2.Win32API 要使用Win32API我们就需......
  • C语言的历史
    C语言的历史目录引言C语言的起源2.1计算机编程语言的早期历史2.2BCPL和B语言C语言的诞生3.1丹尼斯·里奇与贝尔实验室3.2Unix系统的发展C语言的标准化进程4.1ANSIC4.2ISOC标准C语言的应用5.1操作系统开发5.2嵌入式系统5.3编译......
  • Go语言编译时为exe添加图标和属性信息的方法
    在使用Go语言开发应用程序时,有个非常方便的地方就是编译得到的可执行文件可以不依赖任何动态链接库、并且不需要任何运行环境即可运行,这一点Java就没那么方便了。不过在Windows上编译得到的exe文件,默认是不带图标和任何属性信息的,那么怎么才能让我们编译得到的可执行文件带上图标......