用户自己定义的结构体类型,与系统定义的标准类型一样,是可以用来定义结构体类型的变量。这种方法定义的结构体类型在程序后面不可使用,因为缺少完整的结构体类型名。......
2023-10-21
定义了共用体变量后,即可使用它。若需对共用体变量初始化,只能对它的第一个成员赋初始值。例如:“union data x={“zhangsan”};”是正确的,而“union data x={“zhangsan”,12,40000,78,5};”是错误的。
虽然共用体数据可以在同一内存空间中存放多个不同类型的成员,但在某一时刻只能存放其中的一个成员,起作用的是最后存放的成员数据,其他成员不起作用。如果此时引用其他成员,则数据无意义。
例如,对data类型共用体变量,有以下语句:
x.a=100;
strcpy(x.n,“zhangsan”);
x.f=90.5;
则只有x.f是有效的,x.a与x.n目前数据是无意义的,因为后面的赋值语句将前面共用体成员数据覆盖了。
例8.6 分析下列程序的输出结果。(www.chuimin.cn)
运行结果:
101,102
16961
2,0,0
2
程序说明:共用体变量a共占用4个字节的存储空间,执行“strcpy(a.c,“AB”);”语句后,a的成员字符数组c的3个字节被赋值为字符串“AB”,对应的各字符的ASCII码值分别存放在a的对应空间中。因a的成员k与成员c所占用的内存单元是重叠的,所以将前3字节作为a.c。同样,执行程序的“a.k=2;”语句后,a所对应的存储区域中成员k被赋值为2,将刚才a中的数据覆盖了,因此执行下一语句后输出的是“2,0,0”。
有关C语言程序设计 第2版的文章
用户自己定义的结构体类型,与系统定义的标准类型一样,是可以用来定义结构体类型的变量。这种方法定义的结构体类型在程序后面不可使用,因为缺少完整的结构体类型名。......
2023-10-21
例5.12外部变量的使用。我们把例5.12稍加改动:存储类型标识符extern告诉系统,变量类型和名字已在别处定义过了,这里的extern int i;只是说明一下i是外部变量。如果外部变量的定义在使用之前,不用extern说明也可以;但如果定义在使用后面,说明就是不可缺少的了。最后应说明的是,外部变量提供了一种在函数间自由传递数据的机制,为编写程序带来了一些方便。但是,外部变量也有很大的副作用,它破坏了函数的封闭性,使程序的控制复杂起来。......
2023-11-18
指向结构体变量的指针变量叫结构体类型指针变量,其定义方式、使用方法与指向基本变量的方法相同。使用结构体指针变量时还需要特别注意,结构体变量的地址与结构体变量成员的地址是不同的。已知某学生3门课程的成绩存放在一个结构体变量中,请设计一个独立的函数计算该学生的平均成绩,要求函数使用结构体指针变量做函数的形式参数。......
2023-11-20
图5.12extern关键字对全局变量的作用例5.16程序中在第12行定义了全局变量x并赋初值为100,根据定义其作用域为第12~17行所构成的区间。图5.13extern关键字对全局变量的作用在图5.13中标注为②的源程序文件中定义了全局变量y,该全局变量默认的作用域范围为其定义所在的整个源程序文件。自动变量的生存期与其所在函数被调用运行的时间相同,并且自动变量的值在函数的多次调用中都不会保留。......
2023-11-20
当一个指针指向一个结构体变量时,称为结构体指针变量。结构体指针变量中的值是所指向的结构变量的首地址,通过结构指针即可访问该结构变量。结构体指针变量定义的一般形式为:struct结构类型名 *结构指针变量名在定义了struct student结构类型后,如要定义一个指向该结构类型的指针变量pstu,可写为:struct student*pstu;当然也可在定义struct student结构类型的同时定义pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后使用。......
2023-11-18
在变量名及其类型之前加上关键字static,就规定该变量的存储类型为静态的。例5.11一个静态变量和自动变量比较的程序。运行结果:auto_var=0,static_var=0auto_var=0,static_var=1auto_var=0,static_var=2auto_var=0,static_var=3auto_var=0,static_var=4上例中,main()函数共5次调用了auto_static()函数,每次调用时自动变量auto_var都输出0值,这是因为每次调用时系统都给auto_var分配存储单元并赋初值0。当auto_static()结束运行时,static_var的值仍然保留,再次调用auto_static()函数时,系统不再为它重新分配存储空间并赋初值,而是采用以前留下的值,因此static_var的值每次调用都会增加1。......
2023-11-18
“struct结构体名”为结构体数据类型名字,使用结构体类型名才能在程序中定义结构体变量。③“数据类型名结构体成员i;”指定了结构体类型中的一个结构体成员,结构体成员必须像以前的变量定义一样进行说明,成员名的命名规则与变量名相同,要符合标识符的命名原则。④结构体类型定义语句是一条完整的C语句,所以结构体类型的声明要用“;”作为结束符。......
2023-11-20
程序在编译时将每一个变量名对应一个地址,在内存中不再出现变量名,而只有地址。对变量值的存取通过地址进行,访问方式通常有两种。直接利用变量地址进行存取。在例6.1 中,当系统执行输入语句scanf时,根据变量i 与地址的对应关系,找到变量i 的起始地址2011,然后把键盘输入的数值存入&i 所指示的单元中。变量i在内存中的地址和数值,如图6.1 所示。这里,指针变量只能存放地址,而不能存放其他数据。......
2023-10-21
相关推荐