2 hkmyht Hkmyht 于 2016.02.26 14:09 提问

struct sizeof 的问题

一:typedef struct S1
{
}S1;
这肯定编译过不了!

二:typedef struct S2
{
int b;
int c;
}S2;

在main 输出 sizeof(S2) 输出结果是8

三:typedef struct S3
{
int b;
int c;
char * p;
}S3;

sizeof(S3) **输出 12 **

四:typedef struct S4
{
int b;
int c;
char s[0];
}S4;
这时候 sizeof(S4)为什么是8? 而不是12;

图片说明

2个回答

John_ToStr
John_ToStr   Rxr 2016.02.26 16:30
已采纳

http://blog.csdn.net/maopig/article/details/7243646
data是一个数组名;该数组没有元素;该数组的真实地址紧随结构体Info之后;这种声明方法可以巧妙的实现C语言里的数组扩展。

Hkmyht
Hkmyht 谢谢了。这问题昨天已经和朋友讨论了。的确是你说的这样。但是当时我还不知道扩展的用法。。现在学习了。哈哈
2 年多之前 回复
Hkmyht
Hkmyht 谢谢了。这问题昨天已经和朋友讨论了。的确是你说的这样。但是当时我还不知道扩展的用法。。现在学习了。哈哈
2 年多之前 回复
Hkmyht
Hkmyht   2016.02.26 14:36

补三张图;图片说明
图片说明
图片说明

内存跟踪的结果
其中19行和21行
19:strcpy(pchangeable2->pc, "fgg");
21:pchangeable2[1].pc[1] = 55;
修改的应该是是 pchangeable2的首地址 怎么会是pchangeable2+1的地址? 21同样

比如:char * str = (char *) malloc(sizeof(char) * 20);
*str = 'b';
str[1] = 'c';
修改肯定是下标0 和下标1
图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c/c++ struct的大小以及sizeof用法
 写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时
C语言 sizeof(struct)讲解
struct MyStruct  {  double dda1;  char dda;  int type  };  对结构MyStruct采用sizeof会出现什么结果呢?sizeof(MyStruct)为多少呢?也许你 会这样求:  sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13  但是当在VC中测试
sizeof(struct)说明
struct结构体中,对于对齐方式,首先以遇到的第一个类型对齐,之后以第二个类型对齐,之后依次,但遇到最大类型后,后面的全部以最大类型对齐。 系统如64位系统,则最大为8个字节。实例:      printf("char字节为:%d\n",sizeof(char));  //1       printf("short字节为:%d\n",sizeof(short));  //2
c语言之不再害怕sizeof(struct)
程序员在面试的时候经常会碰到一些题目,给出一个结构体,然后sizeof它一下,问值是多少?比如给出下面这样一个结构体: struct test{ char a; short b; char c; int d; }; 也许一些刚开始学习c语言的同学就会毫不犹豫的把struct当中每个变量所占用的空间相加,等到的结果是8。之后结果就错了。为什么呢,首先让把
C语言中的sizeof(struct )和sizeof(union)
一般32位机上各数据类型所占存储空间为: char : 8位 short : 16位 int : 32位 long : 32位 float : 32位 double : 64位 一、结构体struct  1.在没有#pragma pack 宏的情况下: 三条原则: (1)数据成员对齐规则:(原则1) 结构体struct的数据成员,第一个数据成员放在offset为0的地
面试---sizeof
#include <iostream> #include<string.h> #include<stdlib.h>using namespace std;/*结构体的内存空间: a. 当结构体内元素的长度都小于处理器的位数时: 以结构体内最长的数据元素为对齐单位,即结构体的长度一定是最长数据元素的整数倍。 b. 当结构体内存在长度大于处理器位数的元素时,以处理器的位数为对齐单位,但是结 构体内类型相
实例讲解c语言结构体大小 sizeof(struct A)
约定为32位系统,即char 1字节、short 2字节、int 4字节 该问题总结为两条规律: 1,每个结构体成员的起始地址为该成员大小的整数倍,即int型成员的其实地址只能为0、4、8等 2,结构体的大小为其中最大成员大小的整数倍 #include #include #include #include #include #include #include #inclu
关于sizeof(空struct和空class)
struct empty_struct { }empty_struct; struct empty_class { }empty_class; 问:sizeof(empty_struct)和sizeof(empty_class)的大小分别是多少?1. Windows平台下,VC6.0编译环境:空结构体C文件中无法编译通过;在CPP文件中,分别输出1、12.Linux下gcc编译 C文件中,sizeof(empty_struct) = 0C++文件中,sizeof(empty_struct) = 1
sizeof(struct{bit-field})——包含位域的结构体的空间大小
原文:sizeof(struct) 原文地址:http://blog.sina.com.cn/s/blog_913c070a0100zq3m.html 一般情况下,编译器会把struct中的成员作对齐处理,所以sizeof后不是等于所以成员大小之和。 VC编译器做对齐处理的步骤如下(原作者理解): 1、首先获得struct中的大小最大的基本数据类型成员的大小,称为内存分配基大小(以下简称:
C# struct class 在Marshal.SizeOf 的区别
struct 和 class 的区别 最重要的就是 value 和 object 区别了. 但是最近发现另外一个有趣的现象,但是很重要. 一个工程中,因为需要各种结构,于是在开始使用了 struct , 但是觉得有点麻烦,值传递的话,消耗很多,又不喜欢 ref (因为我喜欢写泛型函数) 于是采用了 class , 接下来顺风顺水 , 直到..... [Seriali