学java已经两年过去了,有时想想真是可恨,java一个这么好的一个语言,居然要背着虚拟机满街跑,对于普通客户来说那可是一种煎熬!~所以前几天我做了个决定,一个很傻很天真,很黄很暴力的决定!,没错,我要学Windows API,学一个针对WINDOWS平台的语言!
今天的收获还算挺大,基本上把以前的C语言所有的基础类型,指针,地址,结构,联合全部回忆清楚了。
还是把这些东西记录一下吧。
指针:
指针变量在定义中允许带初始化项。如:
int i=5, j,*ip1=&i,*ip2; 在非定义状态下只能这样操作 ip1 = &i;
指针间的操作:
ip2 = ip1 // 把ip1指向的内存地址赋值给ip2;
*ip2=*ip1 // 把ip1指向的数据赋值给ip2,也就是i,也就是5
结构体:
struct 结构名
{
类型 成员名;
类型 成员名;
...
} 结构变量;
如果省略结构名, 则称之为无名结构,结构成员的表示方式为: 结构变量.成员名
结构指针
结构指针是指向结构的指针。它由一个加在结构变量名前的"*" 操作符来定
义, 例如用前面已说明的结构定义一个结构指针如下:
struct string{
char name[8];
char sex[2];
int age;
char addr[40];
}*student;
struct string *student;
使用结构指针对结构成员的访问, 与结构变量对结构成员的访问在表达方式
上有所不同。结构指针对结构成员的访问表示为:
结构指针名->结构成员
strcpy(student->name, "Lu G.C");
student->age=18;
实际上, student->name就是(*student).name的缩写形式。
需要指出的是结构指针是指向结构的一个指针, 即结构中第一个成员的首地
址, 因此在使用之前应该对结构指针初始化, 即分配整个结构长度的字节空间,
这可用下面函数完成, 仍以上例来说明如下:
student=(struct string*)malloc(sizeof (struct string));
位结构:
位结构定义的一般形式为:
struct 位结构名{
数据类型 变量名: 整型常数;
数据类型 变量名: 整型常数;
} 位结构变量;
例如: 下面定义了一个位结构。
struct{
unsigned incon: 8; /*incon占用低字节的0~7共8位*/
unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/
unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/
unsigned blink: 1; /*blink占用高字节的第7位*/
}ch;
注意:
1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长
度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。
2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针,
如果是指针, 其成员访问方式同结构指针。
3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字
节。
4. 位结构成员可以与其它结构成员一起使用。
联合:
1. 联合说明和联合变量定义
联合也是一种新的数据类型, 它是一种特殊形式的变量。
联合说明和联合变量定义与结构十分相似。其形式为:
union 联合名{
数据类型 成员名;
数据类型 成员名;
...
} 联合变量名;
联合表示几个变量公用一个内存位置, 在不同的时间保存不同的数据类型
和不同长度的变量
下例表示说明一个联合a_bc:
union a_bc{
int i;
char mm;
};
union a_bc lgc;
在联合变量lgc中, 整型量i和字符mm公用同一内存位置
另外, 联合既可以出现在结构内, 它的成员也可以是结构。
例如:
struct{
int age;
char *addr;
union{
int i;
char *ch;
}x;
}y[10];
若要访问结构变量y[1]中联合x的成员i, 可以写成:
y[1].x.i;
若要访问结构变量y[2]中联合x的字符串指针ch的第一个字符可写成:
*y[2].x.ch;
若写成"y[2].x.*ch;"是错误的。
2. 结构和联合的区别
结构和联合有下列区别:
1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻,
联合中只存放了一个被选中的成员, 而结构的所有成员都存在。
2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存
在了, 而对于结构的不同成员赋值是互不影响的。
下面举一个例了来加对深联合的理解。
例4:
main()
{
union{ /*定义一个联合*/
int i;
struct{ /*在联合中定义一个结构*/
char first;
char second;
}half;
}number;
number.i=0x4241; /*联合成员赋值*/
printf("%c%c\n", number.half.first, mumber.half.second);
number.half.first='a'; /*联合中结构成员赋值*/
number.half.second='b';
printf("%x\n", number.i);
getch();
}
输出结果为:
AB
6261
从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;
当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八
位。
枚举(enum)
枚举的说明与结构和联合相似, 其形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数],
} 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始, 顺
次赋给标识符0, 1, 2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次
加1的规则确定其值。
例如下列枚举说明后, x1, x2, x3, x4的值分别为0, 1, 2, 3。
enum string{x1, x2, x3, x4}x;
当定义改变成:
enum string
{
x1,
x2=0,
x3=50,
x4,
}x;
则x1=0, x2=0, x3=50, x4=51
注意:
1. 枚举中每个成员(标识符)结束符是",", 不是";", 最后一个成员可省略
","。
2. 初始化时可以赋负数, 以后的标识符仍依次加1。
3. 枚举变量只能取枚举说明结构中的某个标识符常量。
例如:
enum string
{
x1=5,
x2,
x3,
x4,
};
enum strig x=x3;
此时, 枚举变量x实际上是7。
类型说明
类型说明的格式为:
typedef 类型 定义名;
类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型。这
里类型是Turbo C许可的任何一种数据类型。定义名表示这个类型的新名字。
例如: 用下面语句定义整型数的新名字:
typedef int SIGNED_INT;
使用说明后, SIGNED_INT就成为int的同义词了, 此时可以用SIGNED_INT 定
义整型变量。
例如: SIGNED_INT i, j;(与int i, j等效)。
typedef同样可用来说明结构、联合以及枚举。
说明一个结构的格式为:
typedef struct{
数据类型 成员名;
数据类型 成员名;
...
} 结构名;
此时可直接用结构名定义结构变量了。例如:
typedef struct{
char name[8];
int class;
char subclass[6];
float math, phys, chem, engl, biol;
} student;
student Liuqi;
则Liuqi被定义为结构数组和结构指针。
未完待续!~
分享到:
相关推荐
2015年复试C语言(伊诺吐血回忆版)1
2021年湖北师范学院专升本C语言程序设计试卷.pdf
中央财经大学,信息学院,真题,C语言程序设计,考研
随着计算机技术的发展,可视编程技术占有了... 此次车票管理系统的开发目的是使我们用面向对象的方式来思考和解决问题的能力,并且可以掌握字符数组的使用、字符指针的使用、数据库的设计和文件使用以及C语言语法。
武大遥感院复试上机题09 C语言实现 题目是网上回忆版的,非常简单~
2022《C语言程序设计》课程项目教学技能目标_c语言程序设计课程.docx
这个PPT会让你对C语言的理解有一个质的提升,但这还仅仅是一个入门,并不是全部。 01.序言 02.Hello world的回忆 03.秘密一:main函数的原型 (1-3) 04.秘密二:main函数的返回值 (1-3) 05.秘密三:被隐藏的细节 (1-...
2022c语言实训心得体会(精选4篇)_c语言实训心得总结.docx
自己写的DES加解密C语言代码,可直接使用
一、函数指针的定义 顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * ...回忆一下前面讲解数组指针时的情形。我们说数组指针这么定义或许更清晰: int (*)[10] p;
2022年16道经典c语言面试题.docx
可以帮手你复习一些C语言的主要知识点,让你更快地回忆起C语言
2022北方工业大学C语言考试大纲例文.docx
(完整版)《C语言程序设计》课程教学大纲.docx
(1小时学会C语言51单片机)C语言入门教程.docx
C语言学习总结,这对C语言学习的回忆,帮助初学者了解C语言到底学那些内容
C语言核心技术.pdf
2022年全国计算机等级考试C语言二级公共基础复习资料.docx
123章C语言习题汇编.docx
基于c语言的图书管理系统的实现