c语言-struct sizeof 的问题

问题描述

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;

解决方案

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

解决方案二:

补三张图;

内存跟踪的结果
其中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

时间: 2024-11-03 03:17:10

c语言-struct sizeof 的问题的相关文章

关于C语言struct的特殊扩展技巧

<Unix/Linux编程实践教程>中P69页,有写道,dirent结构中成员d_name用于存放文件名.注意在此系统中d_name被定义为只有一个元素的数组,这是如何做到的能?因为一个自负的空间只能存放字符串的结束字符.P92也询问,在struct dirent中,数组d_name[]的长度在有的系统上是1,而在有的系统上是是255.实际长度是多少?为什么会有这些不同? 对此,我也一直十分困惑,直到看到<深度探索C++对象模型>P19才终于明白. 01 //比如: 02 stru

c语言-C语言用sizeof求数组长度,为什么结果不对?

问题描述 C语言用sizeof求数组长度,为什么结果不对? int aaaaa[10]; printf("%d/n",sizeof(aaaaa)); 结果是40? 解决方案 printf("%d/n",sizeof(aaaaa) / sizeof(int)); 解决方案二: sizeof求的不是数组的长度而是数据占用的空间,单位是字节

c语言-C语言STRUCT数组 不知道哪错了

问题描述 C语言STRUCT数组 不知道哪错了 #include int main(void) { int i,j; float temp; struct Students { char num; char name; char sex; char age; float score; }; struct Students student[5]= { {'0001','一号','男','19',99}, {'0002','二号','女','18',96}, {'0003','三号','女','19

c语言struct的声明定义问题,这段代码对吗,怎么理解?

问题描述 c语言struct的声明定义问题,这段代码对吗,怎么理解? static struct { int32_t hold_course_cd; bool locked_course; float locked_course_err; } steer_state = { hold_course_cd : -1, locked_course : false, locked_course_err : 0 }; 解决方案 定义了结构体,然后再定义 了 static 的结构体变量 steer_sta

Go语言struct类型详解_Golang

struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器.例如,我们可以创建一个自定义类型person代表一个人的实体.这个实体拥有属性:姓名和年龄.这样的类型我们称之struct.如下代码所示: 复制代码 代码如下: type person struct {     name string     age int } 看到了吗?声明一个struct如此简单,上面的类型包含有两个字段. 1.一个string类型的字段name,用来保存用户名称这个属性

c语言-struct {}a,*p 的问题

问题描述 struct {}a,*p 的问题 typedef struct BTNode { //B-树的结构 int keynum; //n struct BTnode *parent; //指向双亲 KeyType key[m + 1]; //K(i) struct BTNode *ptr[m + 1]; //A(i) //Record *recptr[m + 1]; //记录指针向量 }BTNode, *BTree; BTree是指向结构的指针,BTNode * 也是,那我为什么不能把BT

Go语言struct类型介绍_Golang

struct 我们可以声明新的类型,作为其它类型的属性或字段容器. 如,创建一个自定义类型person代表一个人的实体.这个实体拥有属性:姓名&年龄.这样的类型我们称之为struct. 复制代码 代码如下: type person struct{         name string         age int } 复制代码 代码如下: var P person // P 现在就是 person 类型的变量了 P.name = "Astaxie" //  赋值 "

c编译-c语言sizeof操作符的问题

问题描述 c语言sizeof操作符的问题 sizeof后面加函数名为什么结果会是1,求大神详细讲解原因,不要说不能加,因为编译运行出来了结果啊,总有原因的 解决方案 http://segmentfault.com/q/1010000000801175/a-1020000000925625 gcc的规定 解决方案二: 把你的代码贴出来,是不是你用错了. 解决方案三: 原因都是说对void和函数名的sizeof操作是没有意义的.但是我想知道为什么会有结果,并且结果还都是1啊,这有什么能解释的么?对v

C语言安全编码之数值中的sizeof操作符_C 语言

通常来说获取数组的长度时不要对指针应用sizeof操作符. 现来看看下面这段代码: void clear(int array[]) { for(size_t i = 0; i < sizeof(array) / sizeof(array[0]); i++) { array[i] = 0; } } void dowork(void) { int dis[12]; clear(dis); /*...*/ } clear()使用sizeof(array) / sizeof(array[0])这种用法确