猿问

以下运行结果是答案错了吗? 请好心的大神详细的解释解释

#inlude"stdafx.h"
#include<iostream.h>
union area
{ short a;
long b;
char c;
}num;
int main(int argc,char*argv[])这里的char*argv[]含义与作用是什么?
{
num.a=10;
num.b=123456;
num.c='#'
cont<<num.a<<endl;
cont<<num.b<<endl;
cont<<num.c<<endl;
cin>>argc;
return 0;
}
运行结果为什么是
-7645
123427
#
为什么不是
10
123456
#

隔江千里
浏览 173回答 2
2回答

江户川乱折腾

char*argv[]是你从命令行得到的字符串数组,如:a.exe jj jjkargv[0] = "a.exe"argv[1] = "jj"argv[2] = "jjk"argc就是这里的字符串的数量。联合不是结构体,其成员只是共享一段内存。每当你对其成员赋值之时,如果不是先前所储存的那个成员,则会发生覆盖,所以,刚开始,你的联合的内存内赋予:10然后该内存块被123456覆盖,然后被字符'#'覆盖,所以最后只有'#'是正确的,而其它的都是不正确的,根据不同的编译器,可能得到不同的答案。

qq_笑_17

int argc,char*argv[]是main()的两个参数,main()要么不要参数,要么用这两个,具体意思俺还没学到num.a=10;num.b=123456;num.c='#'Union是覆盖型的赋值,就是说你给一个成员赋值之后会把原来成员的值冲掉,所以你最后给num.c赋值之后,num.a和num.b就没什么意思了
随时随地看视频慕课网APP
我要回答