1,#include<> 与#include ""的区别?
include<>到系统指定⽬录寻找头⽂件,#include ""先到项⽬所在⽬录寻找头⽂件,如果没有找再到系统指定的⽬录下寻找
2,描述⼀下变量的命名规则
变量名有字⺟、数值、下划线组成,但不能以数值开头
3,变量的声明与定义有啥区别?
变量声明不需要开辟存储空间,定义需要
4,谈谈计算机中补码的意义
统⼀了零的编码
将符号位与其他位统⼀处理将减法运算转换成加法运算
5,谈谈数组的特点
同⼀个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的
6、描述⼀下指针与指针变量的区别
指针:内存中每一个字节都有个编号,这个编号就是地址,而指针就是这个内存单元的编号.
指针变量:本质是变量,只是该变量存放的是空间的地址编号.
总结:指针是指地址, 指针变量是指存储地址的变量。
7、描述⼀下普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
从初始值 存放位置 使用范围来说
普通局部变量: 存在栈区、不初始化内容随机、只在定义所在的复合语句中有效、复合语句结束变量空间释放(符合语句是用{}括起来的语句,也叫块语句)
普通全局变量 :存在全局区、不初始化内容为0、进程结束空间才被释放,能被当前源⽂件或其他源⽂件使⽤,只是其他源⽂件使⽤的时候,记得使⽤extern修饰
静态局部变量: 存在全局区、不初始化内容为0、整个进程结束空间才被释放,只能在定义所在的复合语句中有效
静态全局变量 :存在全局区、不初始化内容为0、整个进程结束空间才被释放,只能被当前源⽂件使⽤
8,sizeof和strlen的区别?
1、sizeof是一个操作符,strlen是库函数。
2、Sizeof的参数可以是数据的类型,也可以是变量,而strlen只能以结尾为’\0’的字符串作参数。
3、编译器在编译时就计算出了sizeof的结果。而strlen函数必须在运行时才能计算出来。并且sizeof计算的是数据类型占内存的大小,而strlen计算的是字符串实际的长度。
9,结构体与共⽤体的区别是?
结构体中的成员拥有独⽴的空间,共⽤体的成员共享同⼀块空间,但是每个共⽤体成员能访问共⽤区的空间⼤⼩是由成员⾃身的类型决定,存储空间为成员最长长度
10、哪些情况下会出现野指针?
指针变量未初始化、指针释放后未为置空、指针操作超越变量作⽤域
11, 描述一下32位或64位平台下指针的大小?
32位平台:任意类型的指针大小为4字节
64位平台:任意类型的指针大小为8字节
12、啥叫宏函数以及作用
在项⽬中,经常把⼀些短⼩⽽⼜频繁使⽤的函数写成宏函数,这是由于宏函数没有普通函数参数压栈、跳转、返回等的开销,可以调⾼程序的效率。 宏通过使⽤参数,可以创建外形和作⽤都与函数类似地类 函数宏(function-like macro). 宏的参数也⽤圆括号括起来,来保证宏函数的完整性。
13、描述一下内存分区
程序在运行前:分为代码区、BSS段(未初始化数据区)、data段(初始化数据区)
程序在运行后:堆区、栈区、全局区(静态区)、文字常量区、代码区
14、typedef 和 define 有什么区别
1、用法不同:typedef 用来定义一种数据类型的别名,增强程序的可读性。define 主要用来定义常量,以及书写复杂使用频繁的宏。
2、执行时间不同:typedef 是编译过程的一部分,有类型检查的功能。define 是宏定义,是预编译的部分,其发生在编译之前,只是简单的进行字符串的替换,不进行类型的检查。
3、作用域不同:typedef 有作用域限定。define 不受作用域约束,只要是在 define 声明后的引用都是正确的。
4、对指针的操作不同:typedef 和 define 定义的指针时有很大的区别。
5、typedef 定义是语句,因为句尾要加上分号。而 define 不是语句,千万不能在句尾加分号。
14、指针与地址有什么联系?在使用指针的过程中应注意哪些细节?指针类型对于程序设计有哪些意义?
指针保存了某个变量的地址,指针本身是一个变量,它也有自身的地址,而指针的内容是某个变量的地址。注意细节:要初始化、正确的传递地址方式、使用时要判断。指针可以用来有效地表示复杂的数据结构,可以用于函数参数传递并达到更加灵活使用函数的目的,使C语言程序设计具有灵活、实用、高效的特点.