------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. if 使用注意点:
1> 比较大小时,常量值放左边,变量放右边
2> 注意赋值运算符,不要写成两个=
3> if语句后面不要写;
4> 如果要在if后面的语句中定义新的变量,必须用大括号{}
2.while和 do ...while的区别
1> 很多情况下,while和do 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