几天去面试了一家公司,面的是c岗位,但是面的一塌糊涂
大一的时候学过,但是后来都是用来写个简单小程序就足够了.
考研的时候也是写一小段就行
后来也就再没有过系统的学习了,面试时是真的被问懵了
回答问题真是个全面的活,
以前的笔记也找不到了,还是在这里写一下
1 C基本结构:
预处理器指令
函数
变量
语句 & 表达式
注释
注释方法
// 单行注释
/*
多行注释
*/
标识符
可由字母数字和_组成,数字不可作为开头
关键字
关键字 |说明
auto 声明自动变量
const 定义常量,如果一个变量被 const 修饰,那么它的值就不能再被改变
default 开关语句中的"其它"分支
double 声明双精度浮点型变量或函数返回值类型
enum 声明枚举类型
extern 声明变量或函数是在其它文件或本文件的其他位置定义
register 声明寄存器变量
sizeof 计算数据类型或变量长度(即所占字节数)
static 声明静态变量
struct 声明结构体类型
typedef 用以给数据类型取别名
union 声明共用体类型
volatile 说明变量在程序执行中可被隐含地改变
2 数据类型
1 基本类型:
它们是算术类型,包括两种类型:整数类型和浮点类型。
2 枚举类型:
它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。
3 void 类型:
类型说明符 void 表明没有可用的值。
4 派生类型:
它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型。
2.1 整数类型
char 1
int 2或4
short 2
long 4
float 4
double 8
可以使用siaeof(type)来获取对象或类型的存储字节大小
2 .2void类型
void 类型指定没有可用的值。它通常用于以下三种情况下:
"函数返回为空"
C 中有各种函数都不返回值,或者您可以说它们返回空。不返回值的函数的返回类型为空。例如 void exit (int status);
"函数参数为空"
C 中有各种函数不接受任何参数。不带参数的函数可以接受一个 void。例如 int rand(void);
"指针指向 void"
类型为 void * 的指针代表对象的地址,而不是类型。例如,内存分配函数 void *malloc( size_t size ); 返回指向 void 的指针,可以转换为任何数据类型。
3变量
变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。
变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。
有以下四种基本的变量类型
char 一个字节,整数类型
int 四个字节,整数类型
float 四个字节,单精度浮点值,共32位,包括1位符号位+8位指数位+23位小数位
double 八个字节,双精度浮点值,共64位,包括1位符号位+11位指数位+52位小数位
void 表示类型确实
变量的定义方法
type 变量名;
//也可以
type 变量名=值;
type可以是系统或用户自定义的对象,如char int等
变量名可以一个也可以多个,多个时用逗号分隔开
变量声明
变量声明向编译器保证变量以指定的类型和名称存在,
这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。
变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
变量的声明有两种情况:
1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。
例如:extern int a 其中变量 a 可以在别的文件中定义的。
除非有extern关键字,否则都是变量的定义。
extern int i; //声明,不是定义
int i; //声明,也是定义
如果需要在一个源文件中引用另外一个源文件中定义的变量,
我们只需在引用的文件中将变量加上 extern 关键字的声明即可。
全局变量 局部变量 静态变量
面试的时候面试官问了这个问题,记的已经模糊了
回答的时候也是胡说一气
说全局变量是在整个工程有效,局部是当前文件有效,静态是当前函数
唉
还是用的少
考研的时候谁管全局还是局部
就一个代码块
//存储区域
全局,静态全局,静态局部都是放在内存的全局数据区
局部存放在内存的栈区
//作用域
全局变量 整个工程有效
静态全局变量 定义的文件内有效
局部变量 只在定义的函数内有效,函数返回后失效
静态局部变量 只在定义的函数内有效,并且程序会分配一次内存,函数返回后变量不会消失
//区别
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。
//定义方法
int a;//全局变量,全工程通用
static int b;//静态全局变量,当前文件有效
int main()
{
int a;//局部变量,
static int b;//静态局部变量,只在定义它的函数内有效,且只初始化一次
}