您的位置:首页 > 编程语言 > C语言/C++

学习日记-C语言基础复习

2015-06-26 14:42 232 查看
变量的内存分析:

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为止
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: