鱼C论坛

 找回密码
 立即注册
查看: 1674|回复: 13

看下我的注释理解是否正确,多谢;

[复制链接]
发表于 2015-7-20 07:24:38 | 显示全部楼层 |阅读模式
5鱼币
问题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)[32bitPC]=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;
}

C-Free

C-Free


Dev C++

Dev C++




最佳答案

查看完整内容

#include int main(void){ struct tag_1{ int a; };//这里是定义一个整型变量;拥有sizeof(int)的大小; 32bitPC is 4byte; struct tag1_{ int :0; };//记得哪里说的,按最大空间计算,也还是sizeof(int)的大小; /*那么,int:0;是占据1byte都是零,还是只占一个0位,或者不占位.应该是不占位了*/ /*这里的空没有使用,在结构体中有一个规 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-20 07:24:39 | 显示全部楼层
#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)[32bitPC]=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 编译并运行,没有问题!结果都正常!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-22 22:00:37 | 显示全部楼层
:handshake
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-23 17:41:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-23 20:27:31 | 显示全部楼层
不懂~~~~帮顶·~~~:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-24 15:24:11 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 11:57:32 | 显示全部楼层
不懂 顶下把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-7-26 21:29:06 | 显示全部楼层

不懂 顶下把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-27 16:21:52 | 显示全部楼层

:victory:谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-7-27 16:23:15 | 显示全部楼层

:handshake:victory:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-5 11:37:56 | 显示全部楼层
好多,帮顶下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-12 20:47:39 | 显示全部楼层
位段,没听啊.楼主为什么要纠结这个长度问题呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-15 23:22:56 | 显示全部楼层
俞晨曦 发表于 2015-8-12 20:47
位段,没听啊.楼主为什么要纠结这个长度问题呢

因为别人都说我喜欢钻牛角尖;基本上挂死在一个树上的料
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-8-15 23:23:31 | 显示全部楼层

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 08:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表