- FinCloud
-
又有一位谭浩强学生了。。。
共用体非常重要的一点就是多种类型的覆盖性,上面的原则也大略都从此而来。在进行上面所列的四种操作时,都会产生类型上的不确定性。
但是,实际上并非如此。
1.共用体虽然集合了多种类型,但它自身却有固定的大小(大到足够放下最大的类型),赋值时,只需复制内存块即可。
2.当引用共用体变量时,当然得到了该种类型的一个值,比如在函数中传递参数时就是取了该变量的值。
3.定义共用体变量时完全可以进行初始化,但是只能对其第一个类型进行。
4.如同结构体一样,共用体同样可以作为参数传递。
可用如下代码进行验证与学习:
#include <stdio.h>
typedef union{
int i;
double d;
}MYDATA;
void MyFunc(MYDATA data){
printf("data.i=%d ",data.i);
}
int main()
{
MYDATA data={100}; //定义共用体变量时初始化(使用第一个类型)
MYDATA data2;
printf("sizeof(MYDATA)=%d ",sizeof(MYDATA));
//共用体有确定的大小,引用时便可得到该类型的值
MyFunc(data); //可以作为参数传递
data2.i=291;
data=data2; //可以相互赋值
MyFunc(data);
return 0;
}
当然了,有一些事情虽然是可行的,但并不建议去做。
好了,先这样吧,多实践一下吧。
- 小菜G的建站之路
-
可以给变量赋值,但是不能给变量名赋值
- gitcloud
-
共用体共用内存的,要通过其成员才直接存储的数据是什么类型的
共用体变量可以作为函数参数吗?
这有什么不可以的,书上说错了。2023-06-13 07:10:284
共用体变量可以作结构体的成员,但结构体变量不可以是共用体的成员为什么是错的?
结构体可以是共用体的成员2023-06-13 07:11:002
一个共用体变量能否同时存放其所有成员
不可以!!!!!!同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种在给你介绍点公用体的知识:共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用;共用体变量的地址和它的各成员的地址都是同一地址;不能对共用体变量名赋值,不能在定义共用体变量时对它初始化;不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针;共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。2023-06-13 07:11:161
共用体变量
共用体实际共用的是同一块存储地址(看哪个变量类型大,最大类型的变量确定了地址的大小),比如int a,与long long b,假设int是4字节,long long是8字节,那么地址位数就是按8字节分配的,假设b的8字节的起始位置是0x0000,末位置是0x0007.那么a的起始地址是0x0000,末地址是0x0003。当你对任意一个变量赋值时都可能会改变a或b的值(因为共用同一块地址,比如对a赋值,如果前四位地址存储的数据不变,那么b就不变,对于b也是同样的道理),a,b的值都能读出来,因为分配了内存,只不过读出来的值可能和你预期的不一样而已。所以共用体的值都是以最后一次对那个变量赋值为准。2023-06-13 07:11:301
函数可以返回一个共用体变量吗?为什么?解释清楚点
可以吧,估计2023-06-13 07:11:385
C语言之共用体类型
三、共用体类型 共用体中的所有成员共用同一段内存(所有成员的起始地址都是一样的)格式: 注: (1)成员列表为定义该共用体的成员,成员定义与普通变量 的方式一样。 (2)成员列表必须用一对花括号括起。 (3)共用体名可以省略 如: 定义了一个名data的共用体类型,该类型有三个成员:i ch s 1、共用体变量的定义 (1)先定义类型,再定义变量 (2)定义类型的同时,定义变量 (3)直接定义变量 注 由于共用体类型变量的所有成员都共用一段内存,所以共用体类型变量所占的字节数等于该共用体类型中占用字节数最多的成员所占的字节数。 2、共用体变量的引用 注: (1)不能整体引用共用体变量,只能引用其成员。 引用的格式:共用体变量名.成员名 (2)同类型成员共享值 (3)在内存中整型数据的二进制数低8位占用前面一个字节,高8位占用后面一个字节。 如: 整数255,在内存中的存储形式为: 11111111 00000000一个字符型数据占用一个字节,对于数组来说前面元素占用前面的字节。 (4)共用体变量之间可以相互赋值,赋值后两个变量应使用同一成员。 (5)共用体变量的地址与各成员的地址都相同的。 (6)在定义共用体时,可以对其进行初始化,但只能有一个初值且必须用花括号将初值括起。相当于给第一个成员赋值。 (7)共用体、结构体的成员均可以是共用体或结构体类型。 (8)不能用共用体类型变量做为函数参数。 (9)计算共用体占用字节数。 练习题1: 练习题2: 练习题3:2023-06-13 07:11:511
c语言中的共用体是什么?
struct ???2023-06-13 07:12:037
共用体变量的问题
这要理解共同体的原理了,共同体中每个变量都占用同一个内存空间的,所以虽然i没有赋值,但c赋值了,所以i也有值,i的低两位正好是c[1]和c[0],所以i=100h+12=2682023-06-13 07:12:273
共用体变量初始化,但初始化表中是否可以有多个常量
1若初始化列表中只能有一个常量,则常量是赋给第一个成员,其他成员的值默认为"零"值。即数值默认是0,字符默认是"",字符串默认是空串。2要给其他成员初始化,则在第一个成员值后加上其他成员的初值,中间用逗号隔开即可。2023-06-13 07:13:132
请教!C语言里面的共用体变量定义为什么不能初始化呢?
不知道谁写的不能初始化 结果好多书都写得不能初始化,真害人。明明可以用一个数据来初始化。2023-06-13 07:13:272
c语言中的共用体
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。共用体类型数据的特点1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。3.共用体变量的地址和它的各成员的地址都是同一地址。4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。2023-06-13 07:13:375
C语言 共用体 解释下
共用体和结构体的定义形式相似,但含义是不同的,公用体变量所占的内存长度等于最长的成员的长度。这题也就是指MYTYPE them 这个公用体变量所占的内存长度,sizeof表示占几个字节。一个long型占8个字节,int占4个,char型占一个。所以上面最大的为8x2=16个。在c中是选8的。2023-06-13 07:13:565
定义一个共用体变量时,系统分配给他的内存单元是?
B.共用体中的不同变量起始地址都是相同的。就是说它们只是同一单元的不同别名而已。共用体的大小由成员中最大的那个成员决定。2023-06-13 07:14:171
共用体变量所占内存长度等于?
长度最长的那个2023-06-13 07:14:315
不是说不能把共用体变量作为函数参数吗?为什么我可以?
谁告诉你不可以了参考:http://baike.baidu.com/view/1698544.htm#32023-06-13 07:14:562
若已定义了如下的共用体类型变量x,则x所占用的内存字节数为()
Cdouble的内存2023-06-13 07:15:062
共用体和结构体的区别
补充一下:共用体的类型不同时,都是从同一地址开始的(是由低位向高位覆盖的)2023-06-13 07:15:336
C语言共同体问题
首先共同体 un 是两个字节的,因为 char c[2] 是两个字节,short 也是两个字节的,去占用空间最大的类型,因此是两个字节。chang.a=16961,也就是 chang.a=0x4241。存入 chang 的两个字节中的话,低字节保存 0x41(65,"A"),高字节保存 0x42(66,"B")。chang.c[0] 取得的是 chang 的低字节,chang.c[1] 取得是chang的高字节。2023-06-13 07:15:572
在C语言中共用体变量各成员共用一块储存空间
共用体就是union,所有成员共用一个储存空间结构体struct,所有成员各自有自己的内存空间2023-06-13 07:16:224
c语言判断题
1.main函数必须出现在最前面。( X )2.若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变。( / )3.C语言中的逻辑真等价于1。( / )4.for循环只能用于循环次数已经确定的情况。( X )5.若使用一维数组名做实参,实参数组名与形参数组名必须一致。( X )6.函数的定义可以嵌套,但函数的调用不可以嵌套。( X )7.未在定义语句中赋初值的auto变量和static变量的初值都是随机值。( X )8.C程序在执行过程中对预处理命令行进行处理。( X )9.当说明一个结构体变量时,系统分配给它的内存是各成员所需内存量的总和。( / )10.一个共用体变量中,不能同时存放其所有成员。( / )2023-06-13 07:16:324
C 语言共用体变量在程序运行期间,满足( )。
B2023-06-13 07:16:514
如果能把C语言的要点给我列的在详细一点就更好了
这个问题看着字数少,可回答起来好多的呀,呵呵,第一,掌握数据的各种表现形式第二,掌握数据的输入和输出,其中主要掌握各种格式字符串第三,掌握选择结构,其中先掌握关系运算符和逻辑运算符,然后掌握if语句和switch语句,再者,学习break和continue第四,掌握循环,while,do...while,for第五,数组,主要是数组的定义,元素的引用,数组中字符数组对字符串的存储和操作第五,函数,主要掌握,函数调用,包括实际参数,形式参数 ,返回值,还有就是数组作参数时的地址传递第六,掌握指针,只需一点主要的,什么是指针,用来干嘛的,其他的指针知识学起来就ok了第七,掌握结构体,怎么定义一个自定义类型,定义了之后,如何定义这种类型的变量,定义了变量,如何使用第八,掌握文件,怎么打开文件,怎么读写文件,怎么关闭文件2023-06-13 07:17:113
怎样初始化共用体类型变量?C语言
#include <stdio.h> struct aa{int x;int y;};union un{ int a;char b;float c;} arr ={5};void main(){ struct aa xx={1,2};printf("%d %d %d",xx.x,xx.y,arr.a);}打印出:1 2 52023-06-13 07:17:331
当说明一个共用体变量时系统分配给它的内存是()。
当说明一个共用体变量时系统分配给它的内存是()。 A.各成员所需内存量的总和 B.结构中第一个成员所需内存量 C.成员中占内存量最大者所需的容量 D.结构中最后一个成员所需内存量 正确答案:C2023-06-13 07:17:401
C语言中共用体变量所占内存长度等于?
为最长的那个结构体的长度,结构体的长度还要注意下字节对齐的问题。2023-06-13 07:18:137
共用体变量所占内存长度是
等于里面所占内存最大的那个变量的长度。计算机的发明者约翰·冯·诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。它是人类进入信息时代的重要标志之一。随着互联网的提出发展,计算机与其他技术又一次掀起信息技术的革命,根据中国物联网校企联盟的定义,物联网是当下几乎所有技术与计算机、互联网技术的结合,实现物体与物体之间环境以及状态信息实时的共享以及智能化的约翰·冯·诺依曼收集、传递、处理。计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网、通信、多媒体等领域的应用取得了不错的成绩。1996年至2009年,计算机用户数量从原来的630万增长至6710万台,联网计算机台数由原来的2.9万台上升至5940万台。互联网用户已经达到3.16亿,无线网络有6.7亿移动用户,其中手机上网用户达1.17亿,为全球第一位。(2012-2013年中国计算机市场投资领域浅析)中总结:行业需求不乐观:12年和13年一季度软件行业收入增速分别为13.6%和8.5%,11和12年样本企业人员整体同比增长20.3%和15.6%,显示行业整体需求不乐观,多数企业在12年扩张速度放缓。薪酬压力仍大:12年和13年一季度软件行业整体薪酬增速分别为27.2%和22.8%,均超过当期收入增速,使得营业利润同比分别下滑12.4%和18.7%,未来几年多数软件企业薪酬压力仍大,面临员工和股东关于企业利润的再分配。2023-06-13 07:18:511
C语言基础 之 共用体类型
共用体类型又称“联合类型”,简称共用体。共用体类型的说明和变量的定义方式与结构体类型说明和变量的定义方式相类同。它们的区别是结构体变量中的成员各自占有自己的存储空间。而共用体类型变量中的所有成员占有同一个存储空间。 共用体类型说明的一般格式为: union共用体标识名 { 数据类型1 成员名1; 数据类型2 成员名2; ..... 数据类型n 成员名n; }; 例如: 其中union是关键字,是共用体类识的标志。share 是共用体标识名,共用体标识名和成员名都是由用户定义的标识符。按语法规定,共用体标识名是可选项,在说明中可以不出现。共用体的成员可以是简单变量,也可以是数组、指针、结构体和共用体。 定义共用体类型的变量、数组、指针变量还可以用以下这三种方式。 也可以分开定义。此为紧跟在共用体类型union share说明之后,定义共用体变量data和共用体指针变量p。也可以分开定义。 此为先说明共用体类型uion share再单独定义共用体变量data和共用体指针变量 本例中的共用体变量,包含整型成员class和字符成员position,它们将共用一个内存空间。 共用体变量中每个成员的引用方式有以下三种2023-06-13 07:19:021
关于c语言中联合体/共用体中数据存放的问题?
printf("%lf",data.c);--》 printf("%10.2f",data.c);结果是5.0。2023-06-13 07:19:123
C语言共用体问题
x86短整两字节,高字节在后。则00000000 00000010(2)=2(10)如果交换r.i[0]=0,r.i[1]=2,则00000010 00000000(2)=512(10)2023-06-13 07:19:346
C语言公共用体问题
定义在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称为“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。一般定义形式union 共用体名{成员表列}变量表列2023-06-13 07:20:132
C语言有关共用体的使用方法,请前辈们请教谢谢啦!
共同体的存储区域,是共用的。三个变量的内容,占用同一区域。改动一个,全都变。2023-06-13 07:20:244
共用体类型数据的正确叙述有哪些?
1、一个共用体变量中不能同时存放其所有成员2、共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。3.共用体变量的地址和它的各成员的地址都是同一地址。4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,并且,不能在定义共用体变量时对它进行初始化。main(){union data{int a;char b;} data1;data1.b="A";data1.a++;printf("%c ",data1.b);}共用体不同于结构体,会共有一处空间,对于其中一个成员的赋值,会影响到另一个成员,因此虽然是对data1.a++ (表示该值加1,由于该值共用data1.b,也即是 "A" +1 。将会将字符A变为其ASCII码再加1,也即是B)。所以最终结果是B2023-06-13 07:20:321
在c语言中,共用体一般有什么作用?
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单 元。其定义形式为: union 共用体名 {成员表列}; 共用体的定义 union data { int a ; float b ; d o u b l e c ; c h a r d ; } obj; 该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量o b j。共用体2023-06-13 07:20:567
c++ 共用体?
共用体类型也是用来描述类型不相同的数据,但与结构体类型不同,共用体数据成员存储时采用覆盖技术,共享(部分)存储空间。在结构体中增加共用体类型成员,可使结构体中产生动态成员,相当于PASCAl,语言的变体记录。共用体类型在有的书中亦译为联合体类型。定义共用体类型定义用关键字union标识,形式为:union标识符{成员表};标识符给出共用体名,是共用体类型名的主体,定义的共用体类型由“union标识符”标识。例如,定义一个共用体类型,要求包含一个整型成员,一个字符型成员和一个单精度型成员:union icf{int i;char c;float f;};共用体变量定义共用体变量的定义和结构体变量的定义类似,也有三种方法。同样提倡使用第一种方式来定义共用体变量。(1)先定义共用体类型,再定义共用体变量:①union共用体名{成员表};②union共用体名变量表;(2)定义共用体类型的同时定义共用体变量:union共用体名{成员表}变量表;(3)直接定义共用体变量:union{成员表}变量表;请读者给出共用体变量定义的实例。对于共用体类型数据,占有的存储空间等于占有存储空间最大的共用体成员所占空间。2023-06-13 07:21:172
C语言共同体问题
不是0x21,0x43吗?ch[0]是d的最低字节,ch[1]是次低字节。不过可能要注意大端小端等规则。2023-06-13 07:21:397
定义一个共用体变量时,系统分配给他的内存单元是?
B.共用体中的不同变量起始地址都是相同的。就是说它们只是同一单元的不同别名而已。共用体的大小由成员中最大的那个成员决定。2023-06-13 07:22:161
c语言中的共用体是什么?
所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:union 共用体名{成员表列};union data{int a ;float b;doublec;chard;}obj;该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。union data /*共用体*/{int a;float b;double c;char d;}mm;struct stud /*结构体* /{int a;float b;double c;char d;};main( ){struct stud student;printf("%d,%d",sizeof(struct stud),sizeof(union data));}运行程序输出:15,8程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。 对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:union data /*共用体*/{int a;float b;double c;char d;}mm;其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。main( ){union data{int a;float b;double c;char d;}mm;mm.a=6;printf("%d ",mm.a);mm.c=67.2;printf("%5.1lf ", mm.c);mm.d="W";mm.b=34.2;printf("%5.1f,%c ",mm.b,mm.d);}运行程序输出为:66 7.23 4.2,=程序最后一行的输出是我们无法预料的。其原因是连续做mm.d="W";mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。例子虽然很简单,但却说明了共用体变量的正确用法。2023-06-13 07:22:281
在c语言中,共用体一般有什么作用?
共用体是C语言中的一种数据类型,是指将不同类型的数据项存放于同一段内存单元的一种构造数据类型。定义一个共用体类型的一般形式为:union共用体类型名{类型1成员1;类型2成员2;......类型n成员n;};通信中的数据包会用到共用体。因为不知道对方会发一个什么包过来,用共用体的话就很简单了,定义几种格式的包,收到包之后就可以直接根据包的格式取出数据。2023-06-13 07:22:382
C语言中,该共用体的大小为何是12?
你确定是12不是16?2023-06-13 07:23:018
关于c语言的共用体
在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。共用体类型数据的特点1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。3.共用体变量的地址和它的各成员的地址都是同一地址。4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。2023-06-13 07:23:171
c语言共用体实现设计个人名片,包含姓名,职业,电话
union Card{ char name[20]; char job[20]; int tel[20];};注意:1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。3.共用体变量的地址和它的各成员的地址都是同一地址。4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。2023-06-13 07:23:451
共用体和结构体的区别
一、变量长度不同结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。二、占用空间不同结构体是同时存在的,并一次占用一段连续的内存空间;而共用体则是多个共用成员占用同一个开始的内存地址,同时他们只能存在一各,所以空间大小就是最大那个所需的空间,如果单从一个共用体来讲,我们是不知道里面存的是什么内容,需要根据程序上下文才能确定。三、分配储存空间不同结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,简称结构。在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体来使用。在结构体中的变量,可以是相同、部分相同,或完全不同的数据类型。结构体类型的定义只是由用户构造了一个结构体,但定义结构体类型时系统并不为其分配存储空间。参考资料来源:百度百科-c++共用体参考资料来源:百度百科-结构体2023-06-13 07:23:541
已知定义了如下共用体变量:union date {int i; char ch; float f;}b; 则变量b所占的内存长度为 9位
union date {int i; char ch; float f;}b,共用体占四个字节,struct{int x; float f}是8个字节,int与float在32位系统都是占用四个字节2023-06-13 07:24:291
代码运行错误提示
一、基础知识和数据类型、表达式 1、{},[],(),‘",“”不配对。解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容。 2、忘记在语句的末尾加分号,或在预处理命令后多加分号。记住:每一个语句的后边都要加分号,而预处理命令并不是语句,所以不加分号,他们必须每行一条,不能把多个命令写在一行。 3、混淆/和;注释对应的符号是/* */,而转义字符是以开头,除号是/。 4、printf()和scanf()的参数设置有误,主要表现在以下几方面: l 类型不匹配的问题。(例如:有float a=3.5,但输出的时候printf(“a=%d”,a);则屏幕上会显示出a=0.00000或者提示其它运行错误)。基本原则是:float对应%f, int对应%d, char对应%c。 l 个数不匹配。无论是哪个函数,都可以有n个参数,第一个永远是“”括起来的内容,表示输出格式。剩下的n-1个是输出的变量或者输入的变量的地址。需要注意的是,如果后边有n-1个参数,那么前边一定对应n-1个%f一类的格式说明符。 l scanf()中变量前忘了加&。记住:scanf()中变量前要有&(但后边学到的字符数组名和指针前不用加) 5、定义标识符的时候经常出现使用非法字符的情况,例如:标识符中不能用空格,也就是说不能有这样的定义:int radium of circle;一般情况下可用下划线将三个单词连接在一起。 6、在使用变量前未定义,或未初始化。例如:若下边的sum未定义,则在编译时会提示相应的错误信息,而若未初始化为0,则求和的结果一定是错误的。 void main() { int I,a[10], sum=0; /*只要下边要用,这个定义就必须要有,一般情况下也要有初始值*/ for(I=0;I<10;I++) sum+=a[I]; printf(“%d”,sum); } 7、计算错误。主要注意:++,――和其它运算符一起运算时,除根据优先级进行计算时,还要考虑先后位置的特殊含义;数据类型不一致时发生的自动转换也会导致计算的误差;还要注意求模结果的符号与被除数相同;某些特殊情况下 使用懒惰求值法。 8、不能除以0,要做合法性检查; 9、类型溢出。记住每种数据类型的取值范围,确保数据在所定义类型范围之内; 10、数学表达式的格式有误。常见的有:(1)数学与C语言运算表达式的混淆(例如:=表示赋值,而= =才表示我们数学中的相等关系)。(2)、忽略了运算的优先级。解决这个问题的最好方法就是写数学表达式时不要从左到右,而是按优先级的顺序写,写完优先级高的一个表达式后加上()再写下一级的表达式,例如:计算梯形的面积时,要s=((a+b)*h)/2,不要1/2*a+b*h. (3)忽略了计算和赋值时的自动转换。例如:float half=1/2;这样,因为=右边是整数相除的结果为整数0,不会得到0.5存入half,进而会影响下边的计算结果。要想不在这儿绊跟头,当计算不同类型的数据时,一定注意会不会出现引起错误的自动转换,建议最好加上强制转换。(4)赋值号左边不是变量,例如:若有#define PI 3.14,程序中又出现PI=3.14159。又例如:f(n)=f(n-1)*n(这是典型的数学语言,在C语言中右边的乘积不能正确存储,而左边又是一个函数调用)。 11、使用库函数前忘了加#include 二、流程控制 1、 丢掉语句结束标记“;”,尤其是for语句中表达式后或do-while语句后的分号,或在预处理命令后边、while()后、for()后加“;”; 2、 If语句或循环语句中逻辑表达式或关系表达式书写错误。一定要注意C语言的条件与数学表达式的区别(例如我们数学中经常写到的0≤x≤9,在C语言中应该写成x>=0&&x<=9)。 3、 if-else嵌套时不配对。最好在写每个条件时要用两个{}分别将两个分支先括起来,再添加其中的语句,以保证其配对不易错。 4、 switch()语句中的格式不正确。()中的表达式结果一定是一些明确的值,不能是区间;表达式的所有可能结果要列在case后边,case与常量之间有一空格,不要丢掉必要的break; 5、 随意修改循环控制变量i的值,导致循环次数的改变,尤其是当循环有嵌套时。在循环体中,不要将循环控制变量进行另外的改变。 6、 分不清什么情况下用双重循环,什么情况下用两个控制变量写成一重循环。当I不变,j又循环一遍的时候用双重循环。当I,j同时变化的时候用一重循环,此时,循环控制变量有两个,但条件只写一个就可以,因为另一个总是进行相应的变化的。 7、 忽略循环体与循环控制变量的关系。其实,很多情况下,循环控制变量都在循环体中起到非常重要的作用。应该利用上这种关系。 三、数组与指针 1、 字符串的输入有错误:主要表现在使用scanf()或gets()时加了&,或输入字符串时用循环,(这样的话,字符个数无论多长,都不会为自动加,将来引用的时候也就不能以字符串的形式引用。) 2、 对字符串的处理中,循环条件仍然写成I<N。由于字符串是不定长的,所以循环条件一般为str[I]!="" 或I<strlen(str) 3、 而输入所对应的变量是指针时(常见的有:输入的变量是字符数组名或指向字符串的指针)不能加&。 4、 指针定义后未赋值就引用。如果在定义时不知道赋什么值,可以用p=NULL赋初值,以避免引起的灾难性错误。 5、 分不清p和*p。前者是指针,即地址,后者表示指针所间接引用的数据,但如果是二级指针或多级指针,取*以后得到的仍然可能是地址。 四、函数 1、 函数定义的时候,函数头部加分号,而函数声明的地方忘了加分号 2、 函数实参格式不对,主要表现在:给出实参时,多给出数组类型,或者,形参是数组int a[];的时候,给出的a[]或a[I]. 3、 递归时忘了设置边界条件,这样易造成死循环调用。 4、使用函数之前未声明(包括C库函数的声明)。建议大家,将所定义的一切函数都在程序开始的预处理命令后加上函数原型的声明,这样做不仅可以避免错误,而且整个程序的结构看起来更清楚。 五、结构体共用体 1、 结构体类型定义有误,主要表现在:结构体类型里还有嵌套的时候,忘记了成员名称。(例如:下边的例子中,有些同学经常忽略了birthday) 2、 结构体类型名和结构体变量名混淆。例如: struct STU {…. Struct data {int year,month,day; }birthday }; struct STU a; struct STU是类型名称,而且不分配空间,且不能直接引用。只有定义了结构体类型struct STU的变量a以后,才为a分配相应的内存空间,引用时也要是a.??? 3、 结构体变量的成员引用不正确,尤其是当结构体类型中有嵌套定义的时候。一定要一级一级的引用。例如:上边的例子:如果引用其中的年的话,一定是a.birthday.year. 不能直接a.year. 4、 对结构体变量进行输入输出的时候,整体输入或整体输出。除作为函数参数外,不能对结构体变量整体操作,只能一个成员一个成员地输入、输出。 5、 不理解共用体的“共占内存”。对共用体中的成员变量,一定要靠一个标记区别它们,并分别按不同类型引用它们。切记:共用体变量不能做函数形参。 六、文件 1、 使用之前没有打开文件,使用之后没有关闭文件。 2、 相关函数的调用格式有误。请一定注意实参的类型、顺序、个数上与函数原型(或函数声明)的一致。码所代表的意义不同,因此应弄清您所检测的2023-06-13 07:24:361
C语言共用体
这要看机器是大端还是小端的,x86架构都是小端的,所以结果是13。2023-06-13 07:24:464
关于c语言共用体的问题
16进制39,38化成二进制就是111001和111000因为short int 2字节就是16位,所以两个都要在前面补0,每个都要够16位得到0000000000111001和0000000000111000连起来就是00000000001110010000000000111000然后你会发现这就是16进制的3800392023-06-13 07:25:174
C语言问题
因为是共用体变量所以共用体里的变量x,w,c共用同一地址a.w=123456把a.x=3.1416复盖了同理a.c="x"把a.w=123456复盖了所以共用变量体a的十进制值是字符x的ascii码值88 (这个是大写的X的ascii码)2023-06-13 07:26:071
结构体和共同体变量都不能进行比较操作
A 错误,不同结构体的成员名没有关系,同不同都可以,没有比较性。 B 错误,C99支持同类型的结构体整体赋值。 C 错误 ,typedef 关键字是取别名的意思,和定不定义新的数据类型没有关系。 D 对的,类型不一样,无法比较,除非强制转换。2023-06-13 07:26:201
关于共用体的问题哈,知道的给力啊
我不是告诉过你这个问题了吗?共用体下的所有成员共用同一块内存。你用i[0]与i[1]进行赋值后,所有的值都受到了影响,因为他们共用同一块内存。当你用它下面不同的成员去取值时,实际上都是去同一块内存读值,你说b的值是不是和i[0]相等?2023-06-13 07:26:284
C语言中共用体怎么用?
我测试了一下int为32bit,long为32位,char为8位机测试。分析得出这样的结果:这正如共用结构体中假如他们的共用首地址为0x10000000那么地址变量0x10000000:a[0]如果执行语句s.a[0]=0x390x10000004:a[1]相差4个字节那么会产生如下变化:0x10000000:ba[0]=0x39b[0]=0x39c[0]=0x39(字符c[0]="9")0x10000000:c[0]如果再执行语句s.a[1]=0x380x10000001:c[1]那么会产生如下变化:0x10000002:c[2]a[1]=0x380x10000003:c[3]相差1个字节也即是地址0x10000000到0x10000003中的数据为0x00000039也即是地址0x10000004到0x10000007中的数据为0x00000038虽然是共用体,但是abc同用了一个地址如果对a赋值了也同时对b和c赋值只是数据类型不同而已。如果从地址上来分析c如果定义的是c[8],那么c[5]地址即为0x10000004它的值就因该为0x38,因为和a[1]的地址相同。查看b的是后可以直接用%d来查看因为在本机上也是32bit和int相同2023-06-13 07:26:362