下面这段C语言程序的运行结果是多少呢?哪位高手给解释一下啊? 下面这段C语言程序的运行结果是多少呢?能给我解释一下吗?

\u4e0b\u9762\u8fd9\u6bb5\u7a0b\u5e8f\u7684\u8fd0\u884c\u7ed3\u679c\u662f\u591a\u5c11\u5462\uff1f\u6211\u8fd0\u884c\u4e86\u4e00\u4e0b\uff0c\u662f12\uff0c\u53ef\u6211\u4e0d\u7406\u89e3\uff0c\u54ea\u4f4d\u9ad8\u624b\u7ed9\u89e3\u91ca\u4e00\u4e0b\u554a\uff1f

struct num
{int a;
int b;
float f;
}n={1,3,5.0};
\u7684\u542b\u4e49\u662f\u5b9a\u4e49\u7ed3\u6784\u4f53num\uff0cn\u662f\u8be5\u7ed3\u6784\u4f53\u7684\u4e00\u4e2a\u53d8\u91cf\uff0c\u5e76\u4e14\u88ab\u8d4b\u503c\uff0c\u5176\u4e2d

n={1,3,5.0};

\u7684\u610f\u601d\u4e00\u5206\u522b\u4e3an\u4e2d\u7684a,b,c\u8d4b\u503c\uff1aa\u7b49\u4e8e1\uff0cb\u7b49\u4e8e3\uff0cc\u7b49\u4e8e5.0

struct num *pn=&n;
\u7684\u542b\u4e49\u662f\u58f0\u660e\u4e00\u4e2anum\u578b\u7684\u6307\u9488\u53d8\u91cfpn\uff0c\u6307\u5411\u53d8\u91cfn\uff1b

pn->b/n.a*++pn->b
\u7684\u542b\u4e49\u53ef\u4ee5\u7406\u89e3\u4e3a

\uff08pn->b/n.a\uff09*\uff08++pn->b\uff09

\u5176\u4e2dpn->b\u7b49\u4e8e3\uff1bn.a\u7b49\u4e8e1\uff1b

++pn->b

\u662f\u5148\u53d6pn->b\u7684\u503c\uff08\u7b49\u4e8e3;pn->b\u7b49\u4ef7\u4e8en.b\uff09\uff1b\u518d\u5bf9pn->b\u505a\u81ea\u52a0\u8fd0\u7b97\uff08\u7ed3\u679c\u662f4\uff09\uff1b

\u6240\u4ee5

\uff08pn->b/n.a\uff09*\uff08++pn->b\uff09

\u5c31\u7b49\u4ef7\u4e8e
\uff083/1\uff09*(4)
\u7ed3\u679c\u5c31\u662f
12

\u5e38\u91cf\u662f\u6307\u5728\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u4e0d\u4f1a\u6539\u53d8\u7684\u503c\uff0cpn->b\u662f\u4e00\u4e2a\u53d8\u91cf\uff0c\u4ed6\u7b49\u4ef7\u4e8en.b\uff0c\u6240\u4ee5\u662f\u53ef\u4ee5\u81ea\u52a0\u7684\u3002

\u6267\u884c\u8fc7func(x,x+=2)\u4e4b\u540e\uff0cx\u7684\u503c\u53d8\u4e3a8\uff0c\u6240\u4ee5\u5f62\u53c2a,b\u63a5\u6536\u5230\u7684\u503c\u5e94\u4e3a8\uff0c8.\u6240\u4ee5\u6267\u884c\u8fc7\u7684\u7ed3\u679cc=a+b=8+8=16,\u5373\u4e0a\u673a\u5b9e\u9a8c\u7684\u7ed3\u679c\u4e3a16

最后的结果应该是:
2,3

解释一下:
union的意思是union中的元素都公用一块内存,所以a和b使用了同一块内存存储;也就是说,对于s内的任一个元素来说,经过运算:
s[i].a=n;
s[i].b=s[i].a+1;
以后,b和a的值是相同的。

例如:
n==1,i==0时,s[0].a=1;
s[0].b=s[0].a+1;
结果就是s[0].a == s[0].b == 2

n==3,i==1时,s[1].a=3;
s[1].b=s[1].a+1;
结果就是s[0].a == s[0].b == 4

p=&s[0]的含义是p指向数组s的首地址,
++p->a的含义是说先取成员变量a的值,再对取得的值做累加1的操作。

因为c语言中的关键字union的含义就是说,它所定义的所有的成员变量使用一块共享的内存空间,内存空间的大小是根据成员变量中占用内存最大的来确定的。
一个int型的变量占4个字节,现在,a和b都是int型变量,所以他们共同占用4个字节的内存,共享的意思是说,改变了b的值就等于改变了a的值,所以,经过
s[i].a=n;
s[i].b=s[i].a+1;
的操作以后,a和b都被修改了,并且是一样的,以为他们使用相同的内存。

等于3是因为语句:
++p->a
先执行了p->a的操作,再执行了自加的操作,
p->a的值为2,再自加就变成3了。
操作符“->”的优先级要大于"++"的优先级。

可以,因为p->a等价于s[0].a,所以可以自加。

  • 涓嬮潰杩欐C璇█绋嬪簭鐨勮繍琛岀粨鏋滄槸澶氬皯鍛?鑳界粰鎴戣В閲婁竴涓嬪悧?
    绛旓細鎵ц杩噁unc(x,x+=2)涔嬪悗锛寈鐨勫煎彉涓8锛屾墍浠ュ舰鍙俛,b鎺ユ敹鍒扮殑鍊煎簲涓8锛8.鎵浠ユ墽琛岃繃鐨缁撴灉c=a+b=8+8=16,鍗充笂鏈哄疄楠鐨勭粨鏋滀负16
  • 涓嬮潰杩欐C璇█绋嬪簭鐨勮繍琛岀粨鏋滄槸澶氬皯鍛?鍝綅楂樻墜缁欒В閲婁竴涓嬪晩?
    绛旓細n==3,i==1鏃讹紝s[1].a=3;s[1].b=s[1].a+1;缁撴灉灏辨槸s[0].a == s[0].b == 4 p=&s[0]鐨勫惈涔夋槸p鎸囧悜鏁扮粍s鐨勯鍦板潃锛++p->a鐨勫惈涔夋槸璇村厛鍙栨垚鍛樺彉閲廰鐨勫硷紝鍐嶅鍙栧緱鐨勫煎仛绱姞1鐨勬搷浣溿傚洜涓c璇█涓殑鍏抽敭瀛梪nion鐨勫惈涔夊氨鏄锛屽畠鎵瀹氫箟鐨勬墍鏈夌殑鎴愬憳鍙橀噺浣跨敤涓鍧楀叡浜殑鍐呭瓨...
  • c璇█涓,涓嬮潰绋嬪簭鐨勮繍琛岀粨鏋滄槸?
    绛旓細1.绋嬪簭鐨勮繍琛岀粨鏋滄槸锛1,-2 2.瑙i噴姣忎竴姝ョ殑杩愯杩囩▼锛歩nclude <stdio.h> void main(){ int y, a ;y=2, a=1;while (y--!=-1){ do{ a*=y ;a++ ;} while(y--);} printf("%d,%d\n",a,y);} 浠巠=2,a=1寮濮嬪搱 (棣栧厛鎴戜滑瑕佺煡閬撳悗鑷噺y--鍨嬬殑杩斿洖鍊兼槸y鑷噺鍓嶇殑鍊 ...
  • C璇█ 涓嬮潰绋嬪簭娈电殑杩愯缁撴灉鏄( ) 姹傝瑙,璋㈣阿!
    绛旓細k=0锛宮=5 鍥犱负缁忚繃k++锛涜繖涓璇彞涔嬪悗j宸茬粡浠0鍙樹负1浜
  • 涓嬮潰绋嬪簭娈电殑杩愯缁撴灉鏄( )銆 char *p="abcdefgh"; p+=3; printf("%d...
    绛旓細璁﹑鎸囬拡鎸囧悜鈥淎鈥濈殑鍦板潃锛屽鏋滃彇鍊肩殑璇濆氨*P鎷垮埌A浜嗐杩欎釜鍑芥暟杩斿洖鐨勫兼槸鐩爣涓茬殑鍦板潃锛屼篃灏辨槸p鍟︼紝閭d箞p鏄釜鎸囬拡鎬庝箞绠楀湴鍧鐨勯暱搴﹀憿锛屽叾瀹炲氨鏄痵trlen("ABCD")鍟︼紝涓轰粈涔堬紝璁$畻鏈虹煡閬撶殑鍟︼紝鍥犱负p鎸囧悜浜嗏淎BCD鈥濋鍦板潃浜嗭紝鑰c璇█涓粯璁ゅ湪ABCD鍚庡姞涓粨鏉熺鐨勶紝鎵浠ョ瓟妗堝氨鏄4浜嗐
  • C璇█闂:涓嬮潰绋嬪簭鐨勮繍琛岀粨鏋滄槸
    绛旓細鐪嬬湅绋嬪簭閫愭杩愯璺熻釜缁撴灉:i=1;[i=1] i<5鎴愮珛,寮濮嬪惊鐜: i%2涓虹湡, printf杈撳嚭[*], printf绱杈撳嚭[*#]i++;[i=2] i<5鎴愮珛,缁х画寰幆: i%2涓哄亣, continue;i++;[i=3] i<5鎴愮珛,缁х画寰幆: i%2涓虹湡, 绱杈撳嚭[*#*], 绱杈撳嚭[*#*#]i++;[i=4] i<5鎴愮珛,缁х画寰幆: i%2涓...
  • C璇█ 涓嬮潰绋嬪簭娈电殑杩愯缁撴灉鏄( ) (涓汉绠楁槸7,绛旀鏄4,姹傝В绛...
    绛旓細棰樼洰鎰忔濇槸宓屽寰幆锛屽綋婊¤冻m闄や互n娌℃湁浣欐暟鏃跺欙紝鎵цs++璺冲嚭绗簩灞傚惊鐜紝鍥炲埌绗竴灞傚惊鐜户缁亶鍘嗭紝鐩磋嚦涓ゅ眰寰幆閬嶅巻缁撴潫锛岃緭鍑缁撴灉銆傝繃绋嬪涓嬶細绗竴娆 6 % 2 == 0锛屾墽琛宻++锛宻==1锛 璺冲嚭绗簩灞傚惊鐜紱绗簩娆 8 % 2 == 0锛屾墽琛宻++锛宻==2锛 璺冲嚭绗簩灞傚惊鐜紱绗笁娆 9 % 3 == 0锛...
  • C璇█:涓嬮潰绋嬪簭娈电殑杩愯缁撴灉鏄()
    绛旓細for(i=0;i<2;i++){//绗竴灞傚惊锛屽綋i=0鏃跺拰i=1鍙互寰幆锛宨=2灏变笉寰幆浜 for(j=0;j<2;j++){//绗簩灞傚惊鐜綋锛宩=0鏃跺拰j=1鍙互寰幆锛宨=2灏变笉寰幆浜 x[j]=x[j]+1;//褰搃=0鏃讹紝杩涜涓娆[0]=x[0]+1,鍜寈[1]=x[1]+1,鍙互鐭ラ亾 //姝ゆ椂x鏁扮粍瀛樺偍鍐呭x[]={1...
  • 涓嬮潰C璇█绋嬪簭鐨勮繍琛岀粨鏋滄槸?
    绛旓細瀵杩愯缁撴灉鐨勮В閲婂拰鏀规鐨勭▼搴忚鍥 鏀规鐨C璇█绋嬪簭濡備笅
  • C璇█棰樼洰 1.涓嬮潰绋嬪簭鐨勮繍琛岀粨鏋滄槸( )
    绛旓細,a,y);return 0;}杩愯鍚庣殑杈撳嚭鏄細1,-2 鍒嗘瀽杩愯杩囩▼锛歽=2,a=1;鍒ゆ柇锛屼负鐪燂紝y鍙樹负1 杩涘叆do寰幆锛歛=1*1=1; a++鍙樹负2 鍐呭惊鐜垽鏂瓂--涓虹湡锛寉鍙樹负0锛涘啀娆″唴寰幆锛歛=2*0=0; a++鍙樹负1 鍐呭惊鐜垽鏂瓂--涓哄亣锛寉鍙樹负-1锛涘寰幆鍒ゆ柇涓哄亣锛寉鍙樹负-2锛涙墍浠ワ紝鏈鍚庣殑杈撳嚭鏄1,-2 ...
  • 扩展阅读:c++简单程序实例 ... c语言怎么看运行结果 ... c语言运行后不出结果 ... 一个c语言的源程序中 ... 以下程序的输出结果是 ... c语言按回车不出结果 ... 已经有一个程序实例在运行 ... 语言处理程序有哪三种 ... 写出下列程序的输出结果 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网