黑马程序员 — C语言回顾

                                                      ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 

1. if 使用注意点


        1> 比较大小时,常量值放左边,变量放右边

        2> 注意赋值运算符,不要写成两个=

        3> if语句后面不要写;

        4> 如果要在if后面的语句中定义新的变量,必须用大括号{}


2.while和 do ...while的区别


         1> 很多情况下,whiledo while可以互换

         2> while特点:如果一开始的条件不成立,永远不会执行循环体

          do while特点:不管一开始的条件是否成立,至少会执行一次循环体

         3> 一般选用while


3. for循环的注意点:


       1> 不要随便在for()后面写分号

       2> 如果要在循环体中定义新的变量,必须用大括号{}包住

       3> 最简单的利用for循环实现死循环:for(;;);

4. break和continue的区别

        break:直接结束整个while循环。注意点:只对最近的循环结构有效

        continue: 结束当前的循环体,进入下一次循环体的执行。注意点:只对最近的循环结构有效

5.  sizeof运算符

         1> sizeof是一种运算符不要想当然理解为函数

         2> sizeof使用时可以不加()

         3> sizeof可以加变量、常量、数据类型

         4> 如果跟数据类型必须加()

6 .  常用的输出格式
         

               %p 输出地址
               %c 一个字符 

             %s 一个字符串,遇空格、制表符或换行符结束。 
               %d 十进制整数                

               %ld长整型        

               %lld:longlongint 

               %hd:shortint  

               %zd  unsigned long、
               %i 十进制整数 

               %o 八进制形式输出整数 

               %x 十六进制形式输出整数 

 
               %f,%F,%e,%E,%g,%G用来输入实数,可以用小数形式或指数形式输入。 
               %u 读入一个无符号十进制整数%zd:无符号长整型unsignedlong

7. 关于变量的内存分析

          1> 内存寻址由大到小,优先分配内存地址比较大的字节给变量

          2>变量越先定义,内存地址就越大

          3> 取得变量的地址:&变量名

          4> 输出地址:%p

          5> 一个变量一定先进行初始化,才能使用

8 .关于指针

          格式为: 变量类型名   *变量名;

.          指针变量只能存储地址,指针能够根据一个地址,访问对应的存储空间。

           所有的指针都占用8个字节的存储空间。

int   *p;
p = 68;
 指针未经初始化,不能拿来间接访问其他存储空间

int  *p ;
printf ("%d\n", *p);

9.关于字符串

数组定义的字符串:

name [] = "itcast";
特点:字符串中的字符可修改

使用场合:使用于需要经常修改内容的字符串中


指针来定义的字符串:

char  *name = "itcast" ;
特点:字符串中的内容不可修改,是一个常量字符串

使用场合:字符串的内容不需要修改,而且这个字符串经常使用。



10.结构体

定义结构体类型:

struct    结构体名
          {成员列表};

定义结构体的几种方式:

1>  先定义类型,再定义变量(分开定义)

struct  student
{
       int age ;
};
struct   Student   stu;

2>   定义类型的同时定义变量

struct  student
{
     int  age ;
}stu ;
struct  Student  stu2;

3>   定义类型的同时定义变量(省略了类型的名称)

<span style="font-size:18px;">struct 
{
    int  age;
}stu ;</span>

      关于结构体类型的作用域问题:

              当定义在函数外面:全局有效(从定义类型的那一行起,一直到文件结尾),

              当定义在函数(代码块)内部:局部有效(从定义类型的那行起,一直到代码块结束)。

     注意点:

           不允许对结构体本身递归,结构体内可包含别的结构体。定义结构体类型,只说明了该类型的组成情况,并没分配存储空间;只有当定义结构体类型变量的时候,系统才会分配存储空间给该变量。并且结构体变量占用的内存空间是其成员所占内存之和,而且各成员在内存中按照定义的顺序依次排列。

11.枚举类型

       声明形式如下:

enum  [枚举名]{枚举元素列表} ;
enum Sex{Man, Woman, Unkown} ;

12.预处理指令

   1>  预处理指令都是以#开头
   2>  预处理指令分3种: 宏定义,条件编译,文件包含
   3>  预处理指令在代码翻译成0和1之前执行
   4>   预处理的位置是随便写的
   5>预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用
   6>宏名一般用大写或者以k开头,变量名一般用小写

13. 不带参数的宏定义
       1>一般形式
          #define 宏名 字符串 
         比如#define ABC 10
         右边的字符串也可以省略,比如#define ABC
       2>作用
        它的作用是在编译预处理时,将源程序中所有"宏名"替换成右边的"字符串",常用来定义常量。
         
       3>使用习惯与注意
         * 宏名一般用大写字母,以便与变量名区别开来,但用小写也没有语法错误
         * 对程序中用双引号扩起来的字符串内的字符,不进行宏的替换操作。
         * 在编译预处理用字符串替换宏名时,不作语法检查,只是简单的字符串替换。只有在编译的时候才对已经展开宏名的源程序进行语法检查
         * 宏名的有效范围是从定义位置到文件结束。如果需要终止宏定义的作用域,可以用#undef命令
         * 定义一个宏时可以引用已经定义的宏名

14.带参数的宏定义

    1> 一般形式
     #define 宏名(参数列表) 字符串
    2> 作用
     在编译预处理时,将源程序中所有宏名替换成字符串,并且将字符串中的参数 用宏名右边参数列表中的参数替换
    3> 使用注意
    * 宏名和参数列表之间不能有空格,否则空格后面的所有字符串都作为替换的字符串
    * 带参数的宏在展开时,只作简单的字符和参数的替换,不进行任何计算操作。所以在定义宏时,一般用一个小括号括住字符串的参数。
    * 计算结果最好也用括号括起来


13.typedef的声明

    1> 简单的类型名的代替:

typedef  int  I ;  //  指定I为类型名,作用域和int相同
typedef  float  f ; // 指定f为类型名,作用域和float相同
 

   2>简单的类型名代替复杂的类型名的表示方法:   

typedef   struct
{
int  month ;
int  day ;
int  year ;
}Date ; //  类型名Date代表上面的一个结构体类型
Date  birthday ;  //  定义结构体变量birthday





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值