`

回忆C语言

阅读更多

学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被定义为结构数组和结构指针。


未完待续!~

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    (完整版)c语言分支结构习题.docx

    C语言分支结构习题 C语言分支结构习题是C语言编程中一个重要的知识点,分支结构是指根据不同的条件执行不同的语句块。下面我们将对C语言分支结构习题进行详细的分析和解释。 1. 不能看作一条语句的是(d) 该题...

    贪吃蛇_C语言_

    贪吃蛇是一款经典的电子游戏,起源于1976年的“Blockade”游戏,后来在诺基亚手机上流行起来,成为了一代人的回忆。在这个游戏中,玩家控制一条不断变长的蛇,在一个有限的区域内移动,通过吃食物来增加分数,同时...

    武大遥感院复试上机题09 C语言实现

    【描述】提到"题目是网上回忆版的,非常简单~",这意味着试题可能包括基础的C语言编程题目,如简单的算术运算、条件判断、循环控制、数组操作或字符串处理等。考生可能需要编写简洁、高效的代码来解决实际问题,这...

    C语言贪吃蛇源代码

    贪吃蛇是一款经典的电子游戏,起源于1976年的"Blockade",在后续的年份中,特别是在诺基亚手机上流行开来,成为了一代人的回忆。这款游戏的核心玩法是控制一条蛇在有限的空间内移动,通过吞噬食物来增长,同时避免撞...

    2021年湖北师范学院专升本C语言程序设计试卷.pdf

    1. C语言的标识符规则:C语言的标识符必须以字母或下划线开始,之后可以跟字母、数字或下划线。选项B中的"Int"是非法的标识符,因为它以大写字母开头,且不区分大小写。正确答案是B。 2. 表达式运算:表达式"++x"是...

    C语言版魂斗罗

    魂斗罗是一款经典的横向卷轴射击游戏,源自1987年的街机游戏,后来移植到多个平台,成为了许多玩家的童年回忆。 【压缩包子文件的文件名称列表】虽未给出具体文件名,但通常一个C语言项目会包含以下类型的文件: 1....

    C语言也能干大事全部板书(带书签)

    虽然Turbo C是学习C语言的经典工具之一,但由于其界面老旧、缺少现代功能(如网络开发包、Windows界面开发包等),我们建议将其作为历史的回忆。同时,虽然更新版本的Visual C++提供了更多的功能,但在学习C语言基本...

    中央财经信息考研真题C语言程序设计10年回忆版

    ### C语言基础知识 1. **局部变量与全局变量**: - 局部变量是指在函数内部定义的变量,其作用域仅限于该函数内部。当函数调用结束时,局部变量会自动释放。 - 全局变量是在所有函数外部定义的变量,可以在整个...

    2022《C语言程序设计》课程项目教学技能目标_c语言程序设计课程.docx

    C语言程序设计课程教学技能目标 《C语言程序设计》课程项目教学技能目标旨在培养学生娴熟运用基本学问点,练习设计编写小程序的能力。该课程由两部分组成:娴熟运用基本学问点和练习设计编写小程序。 娴熟运用基本...

    纯C语言贪吃蛇

    贪吃蛇是一款经典的电子游戏,起源于1976年的“Blockade”游戏,后来在诺基亚手机上流行,成为了一代人的回忆。它的核心玩法是控制一条不断增长的蛇在有限的区域内移动,通过吃食物来延长身体,同时避免撞到自己的...

    2022c语言实训心得体会(精选4篇)_c语言实训心得总结.docx

    "2022c语言实训心得体会(精选4篇)_c语言实训心得总结.docx" 该文档是一篇关于C语言实训心得体会的总结报告,共四篇。以下是从文档中提炼出的知识点: 1. C语言实训心得体会的重要性:通过实训,学生可以更好地...

    TC for c 开发C语言的小巧工具

    对于怀旧的开发者,它唤起了对早期编程岁月的美好回忆。 在"win-tc"这个压缩包中,我们可以推测这可能是一个Windows版本的Turbo C。这通常会包含安装程序或者已经配置好的模拟环境,让使用者在现代操作系统上也能...

    2015年复试C语言(伊诺吐血回忆版)1

    【C语言基础与程序设计】 本文主要探讨C语言的基础知识,包括字符串操作、循环结构、内存管理和函数的应用。首先,我们来看几个C语言程序设计的相关问题。 1. 程序段分析: 这个程序片段展示了如何通过指针遍历...

    马里奥游戏-C语言课程设计

    马里奥游戏是许多人的童年回忆,它通常包括跳跃、收集金币、躲避敌人等元素,而在C语言环境下重新构建这个游戏,可以为学习者提供一个将理论与实际相结合的机会。 首先,我们需要了解C语言的基本语法和特性。C语言...

    (c语言)贪吃蛇源码

    贪吃蛇游戏是许多人的童年回忆之一,其简单而富有挑战性的玩法让它成为编程学习者的一个很好的练习项目。本篇文章将深入分析一份用C语言编写的贪吃蛇游戏源代码,帮助初学者理解游戏的基本逻辑及实现方式。 #### 二...

    Linux 下C语言原理生动学习 -- Hello World的秘密

    这个PPT会让你对C语言的理解有一个质的提升,但这还仅仅是一个入门,并不是全部。 01.序言 02.Hello world的回忆 03.秘密一:main函数的原型 (1-3) 04.秘密二:main函数的返回值 (1-3) 05.秘密三:被隐藏的细节 (1-...

    2022北方工业大学C语言考试大纲例文.docx

    《2022北方工业大学C语言考试大纲》概述了C语言程序设计课程的考试标准,旨在帮助学生理解和准备考试内容。以下是对大纲中关键知识点的详细解析: 1. **结构化程序设计**:这是C语言的基础,强调清晰的程序结构,如...

    DES加解密C语言代码

    自己写的DES加解密C语言代码,可直接使用

    (完整版)《C语言程序设计》课程教学大纲.docx

    《C语言程序设计》课程教学大纲旨在系统教授C语言的基础知识和编程技巧,旨在提升学生的逻辑思维能力、编程能力和软件开发能力。课程要求学生熟练掌握C语言的基本元素,如变量、语句、函数、数组、指针、结构体和...

    C语言函数指针.doc

    一、函数指针的定义 顾名思义,函数指针就是函数的指针。它是一个指针,指向一个函数。看例子: A) char * (*fun1)(char * ...回忆一下前面讲解数组指针时的情形。我们说数组指针这么定义或许更清晰: int (*)[10] p;

Global site tag (gtag.js) - Google Analytics