c语言共用体包含一个数组成员,我要对这个数组成员进行赋值,一定要一个一个的赋值么?不能写在花括号
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言共用体包含一个数组成员,我要对这个数组成员进行赋值,一定要一个一个的赋值么?不能写在花括号相关的知识,希望对你有一定的参考价值。
里面一次性赋值么
初始化可以,前题是数组是第一个定义的!也可以全共用体赋值!不然就只有逐一赋值了!
unionchar s[10];int a;x='a','b',追问
数组第一个定义的也不行,
typedef union MyUnion
int names[2];
int name;
Unions;
void main()
Unions u ;
u.names = 12,22;//报错
,还有就是什么叫全共用体赋值
typedef union MyUnion
int names[2];
int name;
Unions;
int main()
Unions u = 12,22;/* 初始化第一个元素*/
Unions au =u; /* 整体初始化 */
Unions xu;
xu=u;
/* 整体赋值 */
//报错
,
全共用体赋值,这个说法有些不准确,
记得好像,最早
C语言
union,struct 和数组类型的变量,
只能初始化;
至于赋值,只有内部类型才可以,
union,struct 和数组类型的变量
;
只能对其中的域(field)即C++中的成员变量,赋值;
后来可以整体赋值了(同类型的变量之间可以赋值)。
早期C语言,只有静态数组和外部数组可以初始化;
局部非静态数组是不能初始化的,现在可以了。
union Hello
char hello[10];
int a;
;
Hello h='1','2','3','\\0';
Hello h1=h;
int main(int argc, char *argv[])
Hello h3 =h;
printf("%s\\n",h.hello);/* 输出 123 */
return 0;
}
参考技术A不能写在花括号里边:
#include <stdio.h>union
int i;
char a[2];
*p, u;
int main()
p = &u;
p->a[0] = 0x39;
p->a[1] = 0x38;
return 0;
如果是字符串也可以使用strcpy。等等。
C语言-枚举共用体
1. 共用体
前面章节学习了结构体,结构体里可以按顺序存放相同或者不同的数据类型,每个成员都有它对应的存储空间。
而共用体和结构体一样也可以按顺序存放相同或者不同数据类型,但是与结构体的区别是,共用体所有成员共用一个存储空间,存储空间由成员中存储空间最大的来决定。
定义共用体的关键字: union
下面通过结构体、共同体两个定义代码对比区别。
结构体定义示例:
struct app
int a;
char b;
;
结构体:每个成员是占用独立的空间,结构体成员之间会因为内存对齐产生间隙。
共用体定义示例:
union app
int a;
int b;
char c;
;
**共用体:**也称为联合体,采用内存覆盖技术,每个成员共用一个内存空间,开空间是以最大的成员开空间。 在单片机、嵌入式设备里使用较多。共用体的语法和使用方法(定义、成员变量的访问形式等等)与结构体一样。
共同体案例代码:
#include <stdio.h>
#include <stdlib.h>
union app
int a;
int b;
char c;
;
//匿名方式定义,只能在定义共用体的时候就定义变量
union
int a;
int b;
char c;
a1,a2,a3; //定义3个变量
union app2
int a;
int b;
char c;
b1,b2;
typedef union app3
int a;
int b;
char c;
c1; //c1是新的数据类型--union app3的别名
int main()
b1.a=65;
b1.b=66;
printf("%d\\n",b1.a); //66
printf("%d\\n",b1.b); //66
printf("%c\\n",b1.c); //66
return 0;
2. 枚举
C语言的枚举可以给一串有序的数字集合定义名字,特别是数量较多的整数需要定义名字时,比#define更加方便。特别是定义函数的返回值类型,特别方便,项目开发中,一般标准的函数返回值都有很多种情况,为了方便调用者判断错误类型,可以把这些错误值全部使用枚举定义,这样调用者就能清楚知道每个数值代表的含义。
枚举的定义语法:
enum 枚举名 枚举元素1,枚举元素2,……;
默认成员都是从0开始,如果某一个成员被赋了值,则该成员以后的元素都以此为基础递增。
枚举的定义及用法示例:
#include <stdio.h>
#include <stdlib.h>
#define DEF_VAL 100
//枚举类型
/*
枚举内部的是常量标识符,这些常量标识符就相当于全局变量(声明放在函数之外)
枚举常量只能整型。
默认情况下枚举值是从0开始的,依次递增。
*/
enum app
a1='A',a2,a3,a4
;
typedef enum app2
b1='A',b2,b3,b4
type_app2;
//枚举在程序开发中最常用的地方是:表示函数执行的状态值。
int main()
printf("%d\\n",a1);
printf("%d\\n",a2);
printf("%d\\n",a3);
printf("%d\\n",a4);
return 0;
type_app2 func1()
return b2;
enum app2 func2()
return b3;
枚举应用案例2:
#include <stdio.h>
#include <stdlib.h>
//枚举类型
/*
枚举内部的是常量标识符,这些常量标识符就相当于全局变量(声明放在函数之外)
枚举常量只能整型。
默认情况下枚举值是从0开始的,依次递增。
*/
enum app
a1=0, //表示OK
a2, //第一次空间申请失败
a3, //表示第二次空间申请失败
a4,
a5,
a6
;
//枚举在程序开发中最常用的地方是:表示函数执行的状态值。
enum app func();
int main()
printf("%d\\n",func());
return 0;
enum app func()
int *p1=NULL;
int *p2=NULL;
p1=malloc(4);
if(p1==NULL)
return a2; //1
p2=malloc(4);
if(p2==NULL)
return a3;//2
return a1; //0
以上是关于c语言共用体包含一个数组成员,我要对这个数组成员进行赋值,一定要一个一个的赋值么?不能写在花括号的主要内容,如果未能解决你的问题,请参考以下文章