C语言面试篇(一)总结

一、C语言编程中的几个基本概念

1、#include<>与#include""区别

这个题目考查大家的基础能力,#include<>用来包含开发环境提供的库。#include""用来包含.c/.cpp文件所在目录下的头文件;

言外之意:用户在工程里面自己创建的头文件用#include""包含

注意:有些开发环境可以在当前目录下自动搜索(包含子目录),有些开发环境需要在指定明确的文件或路径。

2、switch(c)语句中c可以是int,long,char,unsigned int类型;即可以隐式转换为整型

3、const 用途 

(1):欲组织一个变量被改变,可以使用const关键字。在定义const变量时,通常需要对其进行初始化,因为以后就没机会改变

(2):对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;

(3):在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值;

(4):对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量;

(5):对于类的成员函数,有时候必须指定其返回值为const类型,以使其返回值不为“左值”;

4、#ifndef/#define/#endif

#ifndef _USER_H_                         
#define _USER_H_  

#define NAME_MAX 32  
#define SEX_MAX 32  
#define TEL_MAX 32  
#define ADD_MAX 32  
#define PEOPLE_MAX 32  
  
#include  
#include  
#include  
  
typedef struct student    
{  
    char name[NAME_MAX];  
    char sex[SEX_MAX];  
    int age;  
    char tel[TEL_MAX];  
    char add[ADDER_MAX];  
}Stu;  
  
typedef struct contact    
{  
    int capacity;  
    Stu *human;  
    int count_p;  
}Con, *Pcon;  
  
void add_people(Pcon pcon);   
int find_people(Pcon pcon);    
void delete_people(Pcon pcon); 
void alter_people(Pcon pcon);  
void show_people(Pcon pcon);   
void clean_people(Pcon pcon);  
void order_people(Pcon pcon);    
void inittel(Pcon pcon);     
void menu();     
void free_mem(Pcon pcon);  

#endif    

#define NAME_MAX 32  
#define SEX_MAX 32  
#define TEL_MAX 32  
#define ADD_MAX 32  
#define PEOPLE_MAX 32  
  
#include  
#include  
#include  
  
typedef struct student    
{  
    char name[NAME_MAX];  
    char sex[SEX_MAX];  
    int age;  
    char tel[TEL_MAX];  
    char add[ADDER_MAX];  
}Stu;  
  
typedef struct contact    
{  
    int capacity;  
    Stu *human;  
    int count_p;  
}Con, *Pcon;  
  
void add_people(Pcon pcon);   
int find_people(Pcon pcon);    
void delete_people(Pcon pcon); 
void alter_people(Pcon pcon);  
void show_people(Pcon pcon);   
void clean_people(Pcon pcon);  
void order_people(Pcon pcon);    
void inittel(Pcon pcon);     
void menu();     
void free_mem(Pcon pcon);  

#endif  

 

(1):主要作用是防止头文件被重复定义

 

(2):这些条件预编译多用于对代码的编译控制,增加代码的可裁剪性,通过宏定义可以轻松的对代码进行裁剪;

5、全局变量和局部变量

先看一段代码:

#include
void test()
{
    int num = 0;
    num ++;
    printf("%d\n", num);
}
int main()
{
    int i = 0;
    for(i=0;i<10;i++)
    {
    	test();
    }
    return 0;
}

上述代码运行结果将会是连续的 1 1 1 1 1 1 1 1 1 1

而不是  1 2 3 4 5 6 7 8 9 10

是因为:

#include
void test()
{
    int num = 0;
    num ++;
    printf("%d\n", num);
}

test()函数中定义的num是局部变量当主函数调用test()函数式创建变量,调完即刻销毁

当用static修饰是结果发生了变化

#include
void test()
{
    static int num = 0;
    num ++;
    printf("%d\n", num);
}
int main()
{
    int i = 0;
    for(i=0;i<10;i++)
    {
    	test();
    }
    return 0;
}

(1):区别 全局变量储存在静态数据库当中,局部变量在堆栈。其实,由于计算机没有通用数据寄存器,则函数的参数、局部变量的返回值只能保存在堆栈中。(局部变量太大可能导致栈溢出,所以建议把大数组放在main()函数之外,以防止栈溢出);

例如如下程序将会导致栈溢出:

#include
int main()
{
    int arr[1024*1024];
    return 0;
}

 

你可能感兴趣的:(【个人感悟】)