请问 为什么画红线处int i 和 double强制转换int b中间用的是 , 而不是 ;谢谢!

c++ 关于结构体_百度知道
c++ 关于结构体
sizeof(s1)= %d\;n&quot。: 8;int j, 24, sizeof(s2))。7;double b。;}: 4;printf(&quot:16;}, sizeof(s1));;输出答案: 8;sizeof(s2)= %d&#92。;printf(&quot:3;struct s2{int i。想知道是为什么: 4.struct s1{int i: 3。;n&quot
提问者采纳
所以sizeof(s1)为16比如2,int,在扫描到b之前;这个大小就是本结构体的对齐大小;在遇到对齐大小的字段之前,再加上b的大小,对齐大小为8,如果累加的大小不是对齐大小的倍数,4进位为8,就是结构体大小,依次累加扫描到的字段大小,累加为16,累加的大小是4(int);在遇到对齐大小的字段之后,累加的大小是4(int);比如s1;扫描到a,按照如下原则(1)获得最大字段大小,累加为16;只针对语言级别的原生类型;继续扫描,则按照对齐大小再进位一次;(3)全部扫描完后计算结构体大小,依次向最后一个字段扫描并累加,对齐大小为8,double等,在扫描到b之前,再加上b的大小,将之前的累加和进位为对齐大小;此时扫描结束,由于不是8的倍数;扫描到b后;比如你的s1和s2的对齐大小都是8(2)从第一个字段开始,然后加上当前字段(即对齐字段),4进位为8,再进位为24;扫描到b后,累加大小为20,比如char
提问者评价
其他类似问题
为您推荐:
其他2条回答
int 的大小为8字节(64位), j共用1个int(8字节);3)struct s1中。所以sizeof(s1) =8+8=16, 没有超过64位(一个int的位数), 三个位域i1)只有64位的程序才会输出这样的输出结果;double b 的大小为8字节, j;4)struct s2中; double b 是8字节, a共用一个int(8字节),
二个连续的位域成员i;2)在64位的程序中, j,因此结构成员i。所以 sizeof(s2)=8+8+8=24,且8+4+3 = 15;最后一个位域成员 a 占用一个int (8字节), a连续定义
struct s1{int i: 8;int j: 4;int a: 3;};结构体是按8个字节(64位)宽度int i:8;int j:4;int a:3;总共占15位所以三个加起来占一个double宽度
sizeof(s1)=16sizeof(s2)=8(12位)+8+8(3位)
结构体的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁若有定义:double k=35;int i=3,j=10;则不符合C语言规定的赋值表达式是 A k=i++,j++ B i=j/2 C j=k-2_百度知道
若有定义:double k=35;int i=3,j=10;则不符合C语言规定的赋值表达式是 A k=i++,j++ B i=j/2 C j=k-2
答案给的A,请指教
提问者采纳
k的值为3?k=i++,赋值的过程是这样的,j的值为11,首先是j=j+1,j++,i的值为4,赋值完毕之后,再执行i=i+1执行完这个语句之后,然后把i自动转换成double型赋值给k(此时i的值仍为3);这个语句中这个不符合是什么意思
提问者评价
其他类似问题
为您推荐:
其他4条回答
A是逗号表达式;B是完全正确的,分为k=i++和j++两个算式,会丢失精度严格说来;C是将一个浮点数赋给整型变量,所有语句都是正确的
B,C都挺普通的。A里面的++一般情况都不允许写到同一行的。
”A里面的++一般情况都不允许写到同一行的“
不懂什么意思
就是别写进同一个语句里面。I++;J++;这样可以的
i被定义为int类型,k被定义为double类型。C语言中规定可以将double类型赋值给int类型,而不能将int类型赋值给double类型。所以A不符合C语言规定
答案A中将i++赋值给k,逗号是标示符后面的j++并没有完成赋值。。。。个人这么觉得
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c++模板是什么?帮我解释下,谢谢!_百度知道
c++模板是什么?帮我解释下,谢谢!
。。(这是我搜的)我只学过c++的基础不明白这个。:模板可是C++的一大技术啊。 你有空看一看c++primer吧,C++的泛型编程和STL可就靠它了。。没事翻到“c++模板”这个新名词,就拜托了
提问者采纳
typename t&t f(){int&
return a, 在模板中制定参数后编译器会根据制定的参数代入到具体的函数或类里, 模板相当于由编译器负责处理的宏(宏是由预处理器进行简单的文本替换):int f(){
return a简单的说.例;()处编译器会用int代替t生成函数f的具体定义;}在f&lt:template &lt
提问者评价
参考资料:
Thinking in C++
其他类似问题
为您推荐:
其他1条回答
下载知道APP
随时随地咨询
出门在外也不愁已知各变量的类型说明如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合c语言语_百度知道
已知各变量的类型说明如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合c语言语
已知各变量的类型说明如下:int i=8,k,a,b;uns畅掸扳赶殖非帮石爆将ignedlong w=5;doublex=1.42,y=5.2;则以下符合c语言语法的表达式是______。A)a+=a+(b=4)*(a=3)B)a=a*3=2C)x%(-3)D)y=float(i)想求助大神们B为什么错。。以及A是如何进行运算的?
提问者采纳
A)a=畅掸扳赶殖非帮石爆将3;b=4;a=a+a+b*a;B)=左侧必须是变量,=是赋值运算,从右向左执行,所以行执行a*3=2,a*3不是变量,所以错误。
提问者评价
来自团队:
其他类似问题
为您推荐:
其他4条回答
B选项中,从右向左运算,先算a*3= 2;这没法算当然错了。A选项中,从右向左运算,a+=a+(b=4)*(a=3)先后过程是:a = 3;b = 4a += b*a; (此时a = 15)a += 15;
(此时a = 30)
X1=X2=X3=....=Y就是吧X1,X2....全赋值成YB)中 a*3不可以被赋值,所以是错的A)中X=Y这种等式本身是有值的,就是Y
是的,左值必须是变了,指针那些。a*3不能作为左值,就和不能为数值分配地址空间一样的道理。
B项是正确的。错误的是C项,因为x为double型,而模运算符%两侧均应为整型数据。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c double 转 int 的文章

 

随机推荐