关于c++结构体长度的问题

问题描述

关于c++结构体长度的问题
#include <iostream>

using namespace std;

struct Student{
    char ch;
    int i;
}st1;

struct name{

}n;

struct j{
    static int i ;
}l;

struct nam{
    static int i;
}e;

struct Studen{

}st;

int main(){
    int s = sizeof(st1);
    int n2 = sizeof(n);
    int l = sizeof(l);
    int e1 = sizeof(e);
    int se = sizeof(st);
    printf("%d %d  %d %d %d", s, l, n2, e1, se);
    return 0;
}

在这个程序中,第二个输出的数字为什么是4呢?不应该是1么?

解决方案

结构体按照4字节的倍数对齐。

解决方案二:

http://www.cnblogs.com/motadou/archive/2009/01/17/1558438.html
http://www.cnblogs.com/longlybits/articles/2385343.html
http://www.cnblogs.com/luxiaoxun/archive/2012/11/09/2762438.html

解决方案三:

一个结构体长度的问题
c++中关于结构体长度的c++结构体对齐问题

解决方案四:

第二个 输出的 不是 sizeof(l)吗, l位 int类型。 int类型是4字节的

解决方案五:

就是1
printf("%d %d %d %d %d", s, l, n2, e1, se);里的l和n2楼主你的顺序写错了吧

解决方案六:

对结构体进行sizeof不是单纯的内部变量的的字节和。涉及到内存对齐的问题,具体可以百度。结构体中最长字节不超过4时,默认4字节对齐

时间: 2024-10-01 05:50:49

关于c++结构体长度的问题的相关文章

c++-请教一个MFC结构体的问题

问题描述 请教一个MFC结构体的问题 请问下MFC中的结构体和 联和有什么区别呀?联和是结构体的集和吗,我看联和里面全是结构体 解决方案 结构体是一个结构中的各个元素都给分配内存.联合是只有一块内存,联合里面的各个元素共用. 解决方案二: 一个结构体长度的问题一个关于结构体赋值的问题 解决方案三: 联合是只有一块内存,联合里面的各个元素共用.

C#中怎么读取Struct(结构体)文件!!!!???大虾帮帮我啊。。。。。

问题描述 做项目需要读取一个.DAT文件,这个文件是别人给的,里面记录了一些调试需要用到的参数,是用结构体(Struct)写成的,用的是C++写的.....现在我拿到了这个.dat文件的结构,里面大致形式为(嵌套的结构体):structA{...structB{....structC{.....}}}好像用C++读取很容易,但我目前的软件都是用C#写的,只能在C#里面读了,这个要怎么读啊?网上找了一些资料,看上去好复杂,哪位大虾能详细的讲一下啊,谢谢!!!!还有,我曾经想过是否可以用C++写一个

c++-请问一个MFC结构体数组的问题

问题描述 请问一个MFC结构体数组的问题 INPUT iput[1]; memset(iput, 0, 1 * sizeof(INPUT)); iput[0].type = INPUT_KEYBOARD; iput[0].ki.wVk = VK_ESCAPE; SendInput(1, iput, sizeof(INPUT)); 如果第一句改成INPUT iput;的话 最后一句的第二个参数前面要加上取地址,请问这是为 什么呀? 解决方案 INPUT iput[1];是一个数组类型,存储相关内容

标C编程笔记day04 预处理、宏定义、条件编译、makefile、结构体使用

预处理:也就是包含需要的头文件,用#include<标准头文件>或#include "自定义的头文件" 宏定义,如:#define PI 3.1415926 查看用宏定义的值替换宏名称,如:gcc -E test.c 带参数的宏:MAX(x,y) (x)>(y)?((x):(y))   //使用方法与函数一样 宏运算:     #define PRINT(n) printf(#n"=%d",n)   //#n 就是把传入的变量值作为字符串放在那里

字节对齐(强制对齐以及自然对齐)

struct {}node; 32为的x86,window下VC下sizeof(node)的值为1,而linux的gcc下值为0: 一.WINDOWS下(VC--其实GCC和其原理基本一样,象这种问题,一般要查具体的编译器设置)字节对齐的规则: 1.一般设置的对齐方式为1,2,4字节对齐方式,VC一般默认为4字节(最大为8字节).结构的首地址必须是结构内最宽类型的整数倍地址:另外,结构体的每一个成员起始地址必须是自身类型大小的整数倍(需要特别注意的是windows下是这样的,但在linux的gc

VC6下DLL,VS2010下用,运行调试异常。

问题描述 VC6下DLL,VS2010下用,运行调试异常. VC6下开发的DLL,在VC6下开发应用程序可以使用前述DLL,工程转换到VS2010之后也可以使用,但是在VS2010下直接使用前述DLL,编译可以通过,但是运行调试时报内存访问异常.请问大侠,该如何解决? 解决方案 两个可能性,一个是本来程序就有内存的问题,但是vc2010对内存的检查更严格,所以问题得以暴露. 另一个可能是单字节双字节的问题,或者一些结构体长度定义不同,你内存分配硬编码了长度,而不是用sizeof求值,导致内存分配

udp-Linux下socket通信函数原型玄机?(UDP)

问题描述 Linux下socket通信函数原型玄机?(UDP) 编写UDP通讯的程序时发现:ssize_t sendto(int sockfd const void *buf size_t len int flagsconst struct sockaddr *dest_addr socklen_t addrlen);ssize_t recvfrom(int sockfd void *buf size_t len int flagsstruct sockaddr *src_addr sockle

IOS开发之路--C语言构造类型_IOS

概述 在第一节中我们就提到C语言的构造类型,分为:数组.结构体.枚举.共用体,当然前面数组的内容已经说了很多了,这一节将会重点说一下其他三种类型. 结构体 枚举 共用体 结构体 数组中存储的是一系列相同的数据类型,那么如果想让一个变量存储不同的数据类型就要使用结构体,结构体定义类似于C++.C#.Java等高级语言中类的定义,但事实上它们又有着很大的区别.结构体是一种类型,并非一个变量,只是这种类型可以由其他C语言基本类型共同组成. // // main.c // ConstructedType

c++ 如何使用CryptoAPI创建一个自签名证书

引文链接:How to create a self-signed certificate with CryptoAPI (C++) CryptoAPI编程 (1)<wbr>微软加密服务体系</wbr> <wbr>微软加密服务体系CryptoAPI的结构如下图所示,微软加密服务体系包含三层结构和两个接口,分别为应用程序层.操作系统层(OS).加密服务提供者层(Cryptographic Service Provider,CSP),CryptoAPI接口和加密服务提供者接口