王保明老师面试常问问题:
二级指针用过没有?怎么用的?
二级指针的输入输出模型会不会?
二级指针怎样把结果甩出来?
模块的封装与设计?做过哪些模块?
回调函数
程序员培养哪些能力?
两种架构
程序设计思维
【知识点开奖】
1、选择排序思想
————————————————————x轴
|
|
|
|
|
|
y
轴
for(int i=0; i<10; i++) //外层循环:控制第几趟
for(int j=i+1; j<10;j++) //内层循环:比较大小
{
if(a[i]<a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
2、
void print(int a[10])
{
... ...
}
int main()
{
int a[10] = {1,2,3};
print(a);
}
注:在形参里边出现的int a[10]、char ch[30]等,编译器会把它当成指针,也不会主动的分配内存 < == > 等价于int *a、char *c等。
3、压死初学者的三座大山
数组数组类型
数组数据类型和数组数类型指针
数组数据类型和数组数类型指针关系
4、数据类型、变量的本质
数据类型:是固定内存大小的别名,比如:a+1与 &a+1 的不一样,是因为a与&a的数据类型不同,步长不同。
变量:(一段连续)内存空间的别名,变量是一个标号。
变量三要素(名称、大小、作用域)
5、void*
memset、memcpy
void不能定义变量,因为编译器不知道void内存大小
void*指针,可被任何指针赋值,但是反之不行。
6、内存四区模型-建立流程
(1)应用程序.exe程序中的代码存放在硬盘上
(2)当点击.exe程序运行起来时,操作系统先把代码Load到内存中;
(3)操作系统把代码分成四个区
(4)然后再找到入口函数main,进行执行代码。
【程序案例】
//C语言的灰色地带
int a; //全局区
int b = 100; //全局区
int main()
{
int a; //栈区(又叫临时区)
int *p;//栈区
p = &a; //cpu执行的代码,放在代码区
a = 10; //cpu执行的代码,放在代码区
p = (int*)malloc(sizeof(int)*100); //堆区
if(p)
{
free(p);
}
}
7、在项目工程中,“全局变量”的统一管理
/*【常见困难】在项目开发中,如果某个头文件中定义了一个全局变量,如果
在其他的多个文件中包含#include"head.h",那么会造成编译错
误:“error:找到一个或多个重定义的符号”。
*/
//解决方案:在项目工程开发过程中,
//1.把所有的全局变量的定义都放在一个.cpp文件中,统一管理。
int a = 0;
int b = 1;
int c = 2;
//2.在其他文件中使用某个全局变量时,直接用extern关键字声明(可以把该全局变量扩展到声明的文件中)。
//即extern修饰全局变量,可以使该全局变量跨文件。
extern int a;
extern int b;
extern int c;