C语言自定义数据类型

请教一下在C语言中定义任意位长的变量。比如定义一个变量a,使a的长度为12位等等。

自定义数据类型就是用户可以随时在程序中自行定义新的数据类型。自定义数据类型时需要设置数据类型的名称及其成员。数据类型成员各属性的设置方法等同于变量设置时相应属性的设置方法。

C中定义数据类型是为了容易编程,定义了数据类型之后又定义了数据类型之间的各种运算,这样对编程人来说就会方便很多。

如不定义数据类型,那么数据之间的差别只有位不同而已,这样如果要定义一个字符变量,首先要去申请一个8位的内存,再去按ASCII码对其进行赋值,这样的话操作很复杂。

扩展资料

1、数据类型的转换是在计算过程中逐步进行的,整个表达式结果的数据类型一定与表达式中出现的精度最高的数据相同,但是具体得到数据值是逐步得到的。

2、C语言算术表达式的计算,在计算过程中,每一步计算所得结果的数据类型由参与运算的运算对象决定,相同数据类型的两个对象运算,结果数据类型不变,不同数据类型的运算对象进行运算,结果的数据类型由高精度的运算对象决定。

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-07-28
C++中有以下几种自定义数据类型方式:typedef、union、enum
typedef
typedef只是用于重命名一种已有的数据类型。
typedef char C; //C c即char c
typedef char field [50]; //field s即char[50]
注意第二种用法,数组的维数[50]是写在最后的。
union
union中的每个成员共享同一段内存(每个成员的起始内存位置都是一样的),整个union的大小取决于最长的成员的大小。
复制代码
union mix_t
{
long l;
struct
{
short hi;
short lo;
}s;
char c[4];
}mix;
复制代码
这个union的内存示意图如图下所示(注意32位机器上,char为1byte,short为2bytes,long为4bytes)
匿名union
非匿名union(union的名字为price)
复制代码
struct
{
char title[50];
char author[50];
union
{
float dollars;
int rmbs;
} price;
} book;
复制代码
匿名union(union没有名字)
复制代码
struct
{
char title[50];
char author[50];
union
{
float dollars;
int rmbs;
};
} book;
复制代码
那么这两种结构的不同就是元素的访问方式不同,假如我们要访问dollars这个元素,第一种是book.price.dollars,第二种是book.dollars。
enum
枚举类型,其中枚举值是常量,而不是变量。
enum days{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
days today = Mon;
其中Mon其实是0,Tue是1,以此类推。
当然Mon不一定要从0开始,所以可以这样写……
enum days{Mon=1, Tue, Wed, Thur, Fri, Sat, Sun};
其中Mon是1,Tue是2,以此类推。
之前一直犯一个错误,直到今天(2015年4月11日)看objc的时候才发现,
enum days{Mon, Tue=2, Wed};  //0 2 3
cout << Mon << endl;  //输出0而不是1本回答被网友采纳
第2个回答  2010-05-09
C语言没有提供这样的定义方式。如果实在要做,是通过变换来实现的。比如,定义为一个包含12个元素的数组,每个元素包含一个数字。
第3个回答  推荐于2016-08-07
int a:12;
不过要用在struct里面

struct{
int a:12;
int b:12;
int c:12;
int d:12;
}a;
cout << sizeof(a) << "\t" << sizeof(int);
1个int4字节,4个12位int只占8字节(因为有对齐,不足32bits倍数的补齐到32bits,所以48位补齐到64位)

或者使用匿名union也可以在外围访问
union{
int a:12;
};
a=3;//ok!本回答被提问者采纳
相似回答