【三支火把】---# program (n)以及C语言字符对齐的总结

#pragma pack(n)

当n大于结构体中内存占用最大的变量内存时,将按照最大内存变量的字节占用数进行对齐,否则,就根据n进行对齐

情况一:

例一:

#pragma pack(4)

struct node{

int a;
char b;
char c;
};

struct node n;

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

结果:测试结果为6

例二:

#pragma pack(4)

struct node{

int a;
char b;
int c;

};

struct node n;

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

结果:测试结果为12

总结:例一中,a占4字节,b占1字节,由于b和c之和不满4字节,所以b和c共占用4个字节对齐。

例二中,a,b均一样,但是由于c占4字节,必须重新开辟4字节进行对齐,所以最终为12字节。

情况二:

#pragma pack(5)

struct node{

long a;
char b;
char c;
};

struct node n;

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

根据测试,最终结果为8,可见,是根于变量n的字节占用数进行对齐的。

时间: 2024-10-13 03:06:01

【三支火把】---# program (n)以及C语言字符对齐的总结的相关文章

C语言字符型数据(字符)

字符型数据的表示 字符型数据就是字符. 字符型数据是用单引号括起来的一个字符.例如: 'a'.'b'.'='.'+'.'?' 都是合法字符型数据. 在C语言中,字符型数据有以下特点: 字符型数据只能用单引号括起来,不能用双引号或其它括号. 字符型数据只能是单个字符,不能是字符串. 字符可以是字符集中任意字符.但数字被定义为字符型之后就不能参与数值运算.如'5'和5 是不同的.'5'是字符型数据,不能参与运算. 转义字符 转义字符是一种特殊的字符.转义字符以反斜线"\"开头,后跟一个或几

C语言字符数组的定义与初始化

C 语言字符数组的定义与初始化 1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' ).2.字符数组与字符串在c 语言中,将字符串作为字符数组来处

C语言——字符数组

在C语言编程中,我们一般用一个字符数组来存放一个字符串.例如,我们想存储这个字符串“http://i.cnblogs.com”,这个字符串一共有20个字符,要存放下这个字符串,我们需要一个长度为21的字符数组.为什么是21个而不是20个呢?在C语言中,字符串数组默认以'\0'结尾,所以我们一共需要一个长度为21的字符数组来存储这个变量. unsigned char text[21] = “http://i.cnblogs.com”; 既然我们已经知道了如何存放一个字符串,那下面我们来讨论另外几个

java语言字符编码问题

上代码 import java.io.*; public class EncodingDemo { public static void main(String[] args) { System.getProperties().list(System.out); try { FileWriter fw=new FileWriter("F:\\workspace\\JavaPrj\\test.txt"); fw.write("小超是个好孩子!"); fw.close(

C语言-字符操作函数

1字符数组的初始化: 1.1 char string={'c','h','i','n','a'} 1.2char string={"china"}或者去掉{}即char string=“china" 1.3 strcpy(string,"china") 2字符串长度:字符串长度函数strlen(char string)=字符的个数+1(结束符"\0") 3输入与输出:printf("\s",string) scanf

C语言字符串匹配、goto语句、关机命令使用

1.程序执行修改窗口字体颜色命令: 2.程序执行修改窗口标题命令: 3.程序执行关机倒计时命令: 4.根据提示输入团队名称JYHACK TEAM 根据提示输入团队网址:http://bbs.jyhack.com 5.如果输入正确,则取消关机命令,并打开某一网页.    如果输入错误,那就等着关机吧. ps:当然对于略懂cmd命令的来说很简单,打开cmd,输入shutdown -a命令即可轻易解除. 源码如下: #include<stdio.h> //printf和scanf函数调用 #incl

分享一篇文章C语言字节对齐问题(适用于C++)转载至http://blog.csdn.net/21aspnet/article/details/6729724

文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透. 一.概念    对齐跟数据在内存中的位置有关.如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐.比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的.   二.为什么要字节对齐   需要字节对齐的根本原因在于CPU访问数据的效率问题.假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x000000

【三支火把】---常用C语言控制台函数总结(持续更新)

写了这么久的C程序,每次看到输出的结果都是从上往下排列的黑白框,有没有感觉很无聊啊?今天再次总结一个常用的控制台函数,能够帮助你做好一个好看的界面. 1.设置光标位置代码如下: 1 int main(void) 2 { 3 int a = 5; 4 COORD pos = {10,10}; //定义光标坐标位置 5 HANDLE hout://定义一个句柄 6 hout = GetStdHandle(STD_OUTPUT_HANDLE); //获得输出设备的句柄 7 SetConsoleCurs

c语言字符数组的初始化问题

1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'}; 即把10个字符分别赋给str[0]到str[9]10个元素 如果花括号中提供的字符个数大于数组长度,则按语法错误处理: 若小于数组 长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串 在c 语言中,将字符串作为字符数组来处理.(c++中