变量的内存分析:
1.内存寻址由大到小,优先分配内存地址比较大的字节给变量
2.变量越先定义,内存地址就越大
3.取得变量的地址:&变量名
4.输出地址:%p
5.一个变量一定先进行初始化,才能使用
if结构
1. if的第1种结构
if(条件)
{
语句1;
语句2;
......
}
2. if的第2种结构
if(条件1)
{
语句1;
语句2;
......
}
else
{
}
3. if的第3种结构
if(条件1)
{
语句1;
语句2;
......
}
else if(条件2)
{
}
else if(条件3)
{
}
......
else if(条件n)
{
}
else
{
}
4.if的第4种结构
if (条件)
语句1;
switch用法:
switch (数值)
{
case 数值1:
语句1;
break;
case 数值2:
语句2;
break;
......
case 数值n:
语句n;
break;
default :
语句3;
break;
}
break:退出整个switch语句
如果case后面没有break,就会执行后面所有case中的语句,直到遇到break为止
while篇:
while (条件)
{
循环体
}
运行原理
1.如果一开始条件就不成立,永远不会执行循环体
2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立......
break
直接结束整个while循环
continue
结束当前的循环体,进入下一次循环体的执行
do {
} while(条件);
while和do-while的区别
1.很多情况下,while和do while可以互换
2.while特点:如果一开始的条件不成立,永远不会执行循环体
do while特点:不管一开始的条件是否成立,至少会执行一次循环体
2. 最好使用while
for篇:
for (语句1;条件;语句2)
{
循环体
}
语句1:初始化语句
语句2:增量语句(执行完循环体后再执行的语句)
1.for一开始就会执行一次语句1(整个for循环只会执行一次)
2.判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立
注意:
1. 不要随便在for()后面写分号
2. 如果要在循环体中定义新的变量,必须用大括号{}包住
break和continue
1.使用场合
1> switch语句:退出整个switch语句
2> 循环结构:退出整个循环语句
* while
* do while
* for
2.注意点
只对最近的循环结构有效
continue:
1.使用场合
循环结构:结束当前这次的循环体,进入下一次循环体
* while
* do while
* for
2.注意点
只对最近的循环结构有效
函数:
1.什么情况下定义函数:添加一个常用的新功能
2.函数的定义格式
返回值类型 函数名(形式参数列表)
{
函数体
}
3.定义函数需要明确的东西
1> 起一个有意义的函数名
参数注意点
1.形式参数:定义函数时函数名后面中的参数,简称形参
2.实际参数:调用函数式传入的具体数据,简称实参
3.实参个数必须等于形参个数
4.函数体内部不能定义和形参一样的变量
5.如果是基本数据类型作为函数形参,纯粹是值传递,修改函数内部形参的值,并不会影响外面实参的值
6.一个函数可以没有形参,也可以有无限多个形参
return的作用:
1> 退出函数
2> 返回一个具体值给函数调用者
返回值注意点
1> void代表没有返回值
2> 如果没有明确说明返回值类型,默认是返回int类型
3> 就算明确声明了返回值类型,也可以不返回任何值
默认情况下,C语言不允许两个函数的名称一样
函数注意点:
1.默认情况下,不允许有函数的名称一样
2.函数不能嵌套定义
3.函数不能重复定义,但是可以重复声明
4.如果有函数的声明,没有函数的定义
1> 编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
2> 链接报错,因为链接的时候会检测函数是否定义
include篇:
include
1> 作用:拷贝右边文件的所有内容到#include所在的位置
2> 自定义的文件用"",系统自带的文件用<>
3> #include <stdio.h>的目的:拷贝printf函数的声明
总结:
一、选择结构
1.if
1> 结构
if (条件) {
} elseif (条件2) {
} elseif (条件3) {
} else{
}
2> 特点
* 同一时刻,只有一个大括号里面的代码会被执行
2.switch
1> 结构
switch(数值)
{
case 数值1:
break;
case 数值2:
break;
case 数值3:
break;
default:
break;
}
2> 特点
1> 默认情况下,只有一个case后面的代码会被执行
2> 如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止
3> 如果要在case后面定义一个新的变量,必须用大括号{}包住
二、循环结构
1.while
1> 特点:如果一开始条件不成立,永远不会执行循环体
2.dowhile
1> 特点:不管条件是否成立,至少会执行一次循环体
3.for
4.选择
1> 一般优先使用for循环
2> 然后再考虑while
3> 最后再考虑do while
指针篇
用法及注意
1.变量类型 变量名;
2. 格式:变量类型 *变量名;
3. 定义了一个指针变量p
4. 指针变量只能存储地址
5. 指针就一个作用:能够根据一个地址值,访问对应的存储空间
6. 指针变量p前面的int:指针变量p只能指向int类型的数据
7.不建议的写法, int *p只能指向int类型的数据
8.指针变量只能存储地址
9. 指针变量未经过初始化,不要拿来间接访问其他存储空间
10. 定义变量时的*仅仅是一个象征,没有其他特殊含义
11.清空指针后,不能再间接访问其他存储空间
12. 不能交换外面实参的值,仅仅是交换了内部指针的指向
13. 完成两个整型变量值的互换
指针和数组:
1.数组元素的访问方式
intages[5];
int *p;
p = ages;
1>数组名[下标] ages[i]
2>指针变量名[下标] p[i]
3>*(p + i)
2.指针变量+1,地址值究竟加多少,取决于指针的类型
int * 4
char * 1
double * 8
指针和字符串:
1.常量区
存放一些常量字符串
2.堆
对象
3.栈
存放局部变量
掌握:
定义字符串的2种方式
1>利用数组
char name[] = "itcast";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2>利用指针
char*name = "itcast";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
指针总结:
一、指针变量的定义
1. 格式:变量类型 *指针变量名;
2. 举例:int *p; char *p2;
3. 注意:定义变量时的*仅仅是指针变量的象征
二、利用指针变量简单修改其他变量的值
1.指向某个变量
int a;
int *p;
p =&a;
或者
int *p= &a;
2.修改所指向变量的值
*p = 10;
3.在函数内部修改外面变量的值
int a =10;
change(&a);
voidchange(int *n)
{
*n = 20;
}
三、指针与数组
1.将数组当做函数参数传入时,会自动转为指针
四、指针与字符串
1.定义字符串的2种方式
1> 利用数组
charname[] = "itcast";
* 特点:字符串里面的字符是可以修改的
* 使用场合:字符串的内容需要经常修改
2> 利用指针
char*name = "itcast";
* 特点:字符串其实是一个常量字符串,里面的字符是不能修改
* 使用场合:字符串的内容不需要修改,而且这个字符串经常使用
2.定义字符串数组
1> 利用二维字符数组
charnames[2][10] = {"jack", "rose"};
2> 利用指针数组
char *names[2] = {"jack", "rose"};
宏定义
1.所有的预处理指令都是以#开头
2.预处理指令分3种
1> 宏定义
2> 条件编译
3> 文件包含
3.预处理指令在代码翻译成0和1之前执行
4.预处理的位置是随便写的
5.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用
6.宏名一般用大写或者以k开头,变量名一般用小写
数据类型总结
一、基本数据类型
1.int
1> longint、long:8个字节 %ld
2> shortint、short:2个字节 %d %i
3> unsignedint、unsigned:4个字节 %zd
4> signedint、signed、int:4个字节 %d %i
2.float\double
1> float:4个字节 %f
2> double:8个字节 %f
3.char
1> 1个字节 %c %d
2> char类型保存在内存中的是它的ASCII值
'A' --> 65
二、构造类型
1.数组
1> 只能由同一种类型的数据组成
2> 定义:数据类型数组名[元素个数];
2.结构体
1> 可以由不同类型的数据组成
2> 先定义类型,再利用类型定义变量
三、指针类型
1.变量的定义
int *p;
2.间接操作变量的值
int a =10;
p =&a;
*p = 20;
四、枚举类型
使用场合:当一个变量只允许有几个固定取值时
小知识
%d\%i 十进制形式输出整数
%c 输出字符
%p 输出地址
%f 输出小数
%o 八进制形式输出整数
%x 十六进制形式输出整数
按位异或 ^
1.相同数值进行异或,结果肯定是0,比如9^9
2.交换 9^5^6== 9^6^5
3.任何数值跟0进行异或,结果还是原来的数值,9^0 ==9
4.a^b^a == a^a^b == 0^b == b
数组和函数:
1.数组作为函数参数,可以省略元素个数
2.数组作为函数参数,传递是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
3.数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
字符串:
\0的作用
1.字符串结束的标记
2.printf("%s", name2);会从name2这个地址开始输出字符,直到遇到\0为止