0419学习总结(数组,函数,预处理)

来源:互联网 发布:c linux ide工具 编辑:程序博客网 时间:2024/05/22 20:53
1.函数:

为什么需要使用函数?--类比于生活中的写文章


2.有哪些函数?

main函数:从main开始执行,在main中结束


3.函数的知识点:
(1)定义:函数的关键,函数的实现部分
(2)声明:函数原型声明,函数的返回值,函数的列表,函数的名字等

(3)调用:调用函数


4.函数的参数
(1)实参:调用函数时,传进去的参数

(2)形参:函数定义的参数


5.传参:传参并不是通过参数的名字进行传递


6.函数的形参个数没有限制,但不能太多


7.传参的过程就是函数调用的过程,形参不能传递給实参,单向传输


8.传值调用,指针可以‘传址调用’,本质上都是传值调用


9.函数的嵌套调用:比如在fun1中调用fun2


10.函数的递归调用:函数调用自身,如求!n


11.函数的返回值:函数的执行目的
(1)过程

(2)结果


12.return 数值;
(1)数值要保持函数定义的时候前面的数据类型一样,返回到函数调用的地方

(2)注意:不返回局部变量的值


13.调用的时候:
(1)保持现场

(2)分配栈空间,函数执行后,释放栈空间


14.函数的名字:
(1)合法
(2)合理

(3)注意:不要太长,不要太复杂


15.两种方式:
(1)linux内核:int_to_string

(2)驼峰式:IntToString


16.为什么要学习数组?
总结:有时候需要定义很多变量,如果用一般的定义方式显得麻烦,并且容易出错,所以就引用数组的这个概念;


定义数组和定义一般变量的比较:

没有谁好谁坏,只有适合与不适合;======》什么时候用数组定义?什么时候用一般变量定义?


17.怎么定义数组?

例子:int nun[4];//数据类型 数组名[常量]; 常量:5 3+2;


18.怎么使用数组?
(1)通过下标,int num[4];
(2)num[0]:使用数组中第一个元素;

(3)num[1]:使用数组中第二个元素;


19.怎么初始化数组?
(1)完全初始化:int a[4] = {1,2,3,4};
(2)不完全初始化:int a[3] = {33};
例子:int a[3] = {};//a[0] = 0,a[1] = 0,a[2] = 0;
     int a[3] = {0};//跟上面是等价的;
 // int a[3];//没有初始化的;随机值!


第一种:
int a; //定义;
a = 1; //赋值;
注意:写代码不是越快越好,质量越高越好!!!!


第二种:
int a = 1; //初始化===》定义的同时赋值;
gcc里面特有的:int a[3] = {[1] = 4};


20.二维数组;
int a[N][M]; //N,M 是常量!
int a[3][4]; //二维数组由3个一维 数组组成,然后每个一维数组里面包含了4个元素;
a[0][0] a[0][1] a[0][2]a[0][3]
a[1][0] a[1][1] a[1][2]a[1][3]
a[2][0] a[2][1] a[2][2]a[2][3]


二维数组在内存中的存储方式:按行存放,先放第一行,再放第二行。。。。。依次类推!


初始化:int a[3][4] = {{},{},{}};
int a[3][4] = {1,2,3,4,5,6,7.....12};
gcc里面特有的初始化方式:a[1][2] = 5;
a[3][4] = {[1][2] = 5};//可以的;


21.字符数组:
char ch[4] = {'a','b'..};
char ch[] = {"HelloWorld"};
char ch[11] = {"HelloWorld"};


字符串的结尾标志是'\0';
遍历字符串的时候,遍历是'\0'默认为字符串结束了,然后'\0'前面的字符就是字符串的内容;
输入字符串的时候:hello 系统会自动在o后面加上一个'\0'表示字符串结束;
‘\0’占存储空间的;


sizeof(ch); //11,加'\0',毕竟'\0'占存储空间的;
strlen(ch); //10,因为'\0'表示字符串结束,字符串的真正内容是'\0'前面的字符,当然不算'\0';
‘\0’是个什么玩意呢? ASCII表---'\0'==>0 什么都不显示!


int a[5] = {1,2,3,4,5};
sizeof(a); ///定义了整型数组,然后数组元素是5个,每一个整型数所占字节是4个字节,那么5个呢:4*5 = 20;
sizeof(a)/sizeof(a[0]);//实现什么功能?数组个数!


数组里面的数据类型都是一样的啊,不是说可以2个int和3个float!!!!


数组的基本应用:


1、冒泡排序:
2、选择排序:


22.编译预处理:
(1)宏定义:
不带参数: #define MAX 100
带参数的宏定义: #define S(a) a*a //宏函数;
“”里的内容不替换;
带参的宏定义最好加上();
举个例子:S(a) a*a S和(之间没有空格


带参的宏定义称为宏函数:


笔试题和面试题:
宏函数和自定义函数的区别:
1、宏函数在预处理阶段进行替换,自定义函数是在编译期间进行处理;
2、宏函数没有类型,自定义函数有类型;
3、因为宏函数只是进行简单的替换,自定义函数调用的时候还得分配栈空间、保存现场,所以宏函数执行效率比自定义函数高;
4、也是因为只是进行简单的替换,所以不进行语法检查,自定义函数进行语法检查;


既然宏函数执行效率高,而自定义函数进行语法检查,各有优点;
内联函数:inline
内置宏:
两个下划线连起来的!
typedef:不是在预编译处理阶段处理的;




23.条件编译:
#if 宏名
...
#elif
....
#endif







































0 0