|
941.函数设计原则
(1)函数从意义上应该是一个独立的功能模块
(2)函数名要在一定程度上反映函数的功能
(3)函数参数名要能够体现参数的意义
(4)尽量避免在函数中使用全局变量
void sc(char s1, char s1);×
void str_copy(char* dest, char* src); √
(5)当函数参数不应该在函数体内部被修改时,应加上 const 声明
(6)如果参数是指针,且仅作输入参数,则应加上 const 声明
void str_copy(char* dest, const char* src);
(7)不能省略返回值的类型。如果没有返回值,应声明为 void。
(8)对参数进行有效性检查,特别是指针参数的检查尤为重要
(9)不要返回指向“栈内存”的指针,因为栈内存在函数体结束时被自动释放
(10)函数体的规模要小,尽量控制在 80 行代码之内
(11)相同的输入对应相同的输出,避免函数带有“记忆”功能
(12)避免函数有过多的参数,参数个数尽量控制在 4 个以内
(13)有时候函数不需要返回值,但为了增加灵活性,如支持链式表达,可以附加返回值
char s[64];
int len = strlen(strcpy(s, “Hello”)); //当中的 strcpy 返回缓冲区 s 的地址。
(14)函数名和返回值类型在语义上不可冲突
char c = getchar(); //getchar 的返回值实际上是 int 类型,而不是 char。与函数名不符。
942.C语言中的回调函数
(1)回调函数是利用函数指针实现的一种调用机制
(2)回调机制原理
①调用者不知道具体事件发生时需要调用的具体函数
②被调函数不知道何时被调用,只知道需要完成的任务
③当具体事件发生时,调用者通过函数指针调用具体函数。
(3)回调机制中的调用者和被调用者互不依赖。
943.C语言中二维数组参数
(1)二维数组参数同样存在退化的问题:
二维数组可以看做是一维数组,其中的每个元素又是一个一维数组
(2)二维数维参数中第一维的参数可以省略
①void f(int a[5])←→void f(int a[])←→void f(int* a)
②void g(int a[5][3])←→void g(int a[][3])←→void g(int (*a)[3]);
(3)等价关系

(4)被忽视的知识点
①C 语言中无法向一个传递任意多维数组。换一句话讲,形参 int a[][3]是合法的,但 inta[][]是非法的。
①因此,必须提供除第 1 维之外的所有其他维长度。第一维之外的维度信息用于完成指针运算。
943.数组的本质
(1)数组是一段连续的内存空间
(2)数组的空间大小:sizeof(array_type)*array_size;
(3)数组名可看做指向数组第一个元素的常量指针
(4)数组声明时编译器自动分配一片连续的内存空间 ,而指针声明时只分配了用于容纳地址值的 4 字节空间
944.数组的含义
(1)数组是相同类型的变量的有序集合

(2)数组在一片连续的内存空间中存储元素
(3)数组元素的个数可以显示或隐式指定
945.C语言中#pragma 的使用
(1)#pragma 用于指示编译器完成一些特定的动作
(2)#pragma 所定义的很多指示字是编译器特有的,在不同的编译器间是不可移植的
①预处理器将忽略它不认识的#pragma 指令
②不同编译器可能以不同的方式解释同一条#pragma 指令
(3)一般用法:#pragma parameter //注意,不同的 parameter 参数语法和意义不同
946.C语言中#line的用法
(1)#line 用于强制指定新的行号和编译文件名,并对源程序的代码重新编号
(2)用法:#line number newFilename //newFilename 可省略
(3)#line 编译指示字的本质是重定义LINE和FILE
947.C语言中#error的用法
(1)#error 是一种预编译器指示字,用于生成一个编译错误消息
(2)用法:#error message //注意:message 不需要用双引号包围
(3)#error 编译指示字用于自定义程序员特有的编译错误消息。类似的,#warning 用于生成编译警告消息
(4)#error 可用于提示编译条件是否满足。编译过程中的任何错误意味着无法生成最终的可执行程序
948.c语言中数组参数退化为指针的意义
(1)C 语言中只会以值拷贝的方式传递参数,当向函数传递数组时,将整个数组拷贝一份传入函数导致执行效率低下,C 语言以高效作是最初的设计目标,所以这种方法是不可取的。
(2)参数位于栈上,太大的数组拷贝将导致栈溢出。
(3)将数组名看做常量指针,传递的是数组的首元素地址,而不是整个数组。
949.程序中的顺序点
(1)程序中存在一定的顺序点。
(2)顺序点指的是执行过程中修改变量值的最晚时刻
(3)在程序到达顺序点的时候,之前所做的一切操作必须完成。
950.面向过程的程序设计
(1)面向过程是一种以过程为中心的编程思想
(2)首先将复杂的问题分解为一个个容易解决的问题
(3)分解过后的问题可以按照步骤一步步完成
(4)函数是面向过程在 C 语言中的体现
(5)解决问题的每个步骤可以用函数来实现
1000道c/c++经典面试题PDF,进官方交流群获取

—————————————Linuxc/c++高性能服务器开发网官方3群—————————————– |
|