看下我的注释理解是否正确,多谢;
问题1:使用printf()打印,提示出错,为什么?问题2:我自己的理解是否存在问题【注释里面的】
#include<stdio.h>
int main(void){
struct tag_1{
int a;
};//这里是定义一个整型变量;拥有sizeof(int)的大小; 32bitPC is 4byte;
struct tag1_{
int :0;
};//记得哪里说的,按最大空间计算,也还是sizeof(int)的大小;
/*那么,int:0;是占据1byte都是零,还是只占一个0位,或者不占位.应该是不占位了*/
struct tag0{
int a:3;
};//占据3bit的a,sizeof(tag0)也是sizeof(int);等于4;
struct taga{
int a:3;
int b;
};//int b;定义一个整型变量占据4byte,a:3占据3bit,但也是一个sizeof(int) ,所以sizeof(taga)=4+4=8;
struct tagb{
int a:1;
int b:2;
int c:3;
};//1+2+3=6bit,sizeof(int)=4;
struct bs{
unsigned a:4;
unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
unsigned b:4;
unsigned c:4;
};
printf("sizeof(tag1_)=%d;\n",sizeof(tag1_));
printf("sizeof(int)=%d;\n",sizeof(int));
printf("sizeof(struct tag_1)=%d;\n",sizeof(struct tag_1));
printf("sizeof(struct tag0)=%d;\n",sizeof(struct tag0));
printf("sizeof(struct taga)=%d;\n",sizeof(struct taga));
printf("sizeof(struct tagb)=%d;\n",sizeof(struct tagb));
printf("sizeof(struct bs)=%d;\n",sizeof(struct bs));
//大家往这看,这是问题,问题在这里,就是这几个printf();
//这是啥问题?有截图。我在C4droid编译通过,在C-Free和dev c++都是出问题的;
//还有个问题就是,帮我看下我注释有没有啥问题?
//其实就俩问题:看下注释,看下printf();
return 0;
}
#include<stdio.h>
int main(void){
struct tag_1{
int a;
};//这里是定义一个整型变量;拥有sizeof(int)的大小; 32bitPC is 4byte;
struct tag1_{
int :0;
};//记得哪里说的,按最大空间计算,也还是sizeof(int)的大小;
/*那么,int:0;是占据1byte都是零,还是只占一个0位,或者不占位.应该是不占位了*/
/*这里的空没有使用,在结构体中有一个规定,如果结构体为空则存在一个没有意义的char,故此有一个字节*/
struct tag0{
int a:3;
};//占据3bit的a,sizeof(tag0)也是sizeof(int);等于4;
//先定义了一个 32位的int, 其后前三位命名为a 并按整数的计算法则使用,这没有别的,故此 4个字节
struct taga{
int a:3;
int b;
};//int b;定义一个整型变量占据4byte,a:3占据3bit,但也是一个sizeof(int) ,所以sizeof(taga)=4+4=8;
//这里前面部分同上先有int 后使用其前三位,之后的 再定义了一个完整的b;8个字节
struct tagb{
int a:1;
int b:2;
int c:3;
};//1+2+3=6bit,sizeof(int)=4;
//定义int 一次使用 1 2 3 个位,没有超过32不会开辟新的int; 4字节
struct bs{
unsigned a:4;
unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
//这里的是占用了当前int中剩下的所有未使用位28位
unsigned b:4;//此处重新开辟int 32位
unsigned c:4;
};//所以结果是8字节
struct bs_1{
unsigned a:4;
unsigned f:22;
unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
//这里的是占用了当前int中剩下的所有未使用位6位
unsigned b:4;//此处重新开辟int 32位
unsigned c:4;
};//所以结果是8字节
struct bs_2{
unsigned a:15;
unsigned f:20;
//此处前面使用 15位 剩余17位 但是 新的f 需要20位 剩余位不足 固开辟新的 int
unsigned :0;//详见:"当无名域..8byte).c";偏移量sizeof(int);
//这里的是占用了当前(新开辟的)int中剩下的所有未使用位12位
unsigned b:4;//此处重新开辟int 32位
unsigned c:4;
};//所以结果是12字节
//新添加了两个例子,希望能有帮助!
printf("sizeof(tag1_)=%d;\n",sizeof(tag1_));
printf("sizeof(int)=%d;\n",sizeof(int));
printf("sizeof(struct tag_1)=%d;\n",sizeof(struct tag_1));
printf("sizeof(struct tag0)=%d;\n",sizeof(struct tag0));
printf("sizeof(struct taga)=%d;\n",sizeof(struct taga));
printf("sizeof(struct tagb)=%d;\n",sizeof(struct tagb));
printf("sizeof(struct bs)=%d;\n",sizeof(struct bs));
//大家往这看,这是问题,问题在这里,就是这几个printf();
//这是啥问题?有截图。我在C4droid编译通过,在C-Free和dev c++都是出问题的;
//还有个问题就是,帮我看下我注释有没有啥问题?
//其实就俩问题:看下注释,看下printf();
return 0;
}
所有的注释都没什么问题吧,这个是 结构体定义的 按位使用,首先应该考虑的是定义的类型 其次是其使用的位数!
有几点要注意:每一个 内部变量的位长 不可以超出总位长; 单一内部变量 不可同时使用两个变量的位(只能存在一个变量的内部),长度不足时开辟新的变量空间;:0跳过单签变量空间中剩余未使用的部分,若后面再定义则重开变量空间;
我使用 VS2013 编译并运行,没有问题!结果都正常!
:handshake 默.默 发表于 2015-7-22 22:00
{:7_130:}:hand shake 不懂~~~~帮顶·~~~:lol: lwmheaton 发表于 2015-7-23 20:27
不懂~~~~帮顶·~~~
{:9_228:} 不懂 顶下把
不懂 顶下把 cqj9006 发表于 2015-7-26 21:29
不懂 顶下把
:victory:谢谢 weisuo 发表于 2015-7-26 11:57
不懂 顶下把
:handshake:victory: 好多,帮顶下 位段,没听啊.楼主为什么要纠结这个长度问题呢 俞晨曦 发表于 2015-8-12 20:47
位段,没听啊.楼主为什么要纠结这个长度问题呢
因为别人都说我喜欢钻牛角尖;基本上挂死在一个树上的料 阔怀 发表于 2015-8-5 11:37
好多,帮顶下
谢谢{:7_113:}
页:
[1]