二次面试踩的坑

1、static的作用

在C语言中,关键字static的意思是静态,它有3个明显的作用:

1)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态的变量在这一函数被调用的过程中其值维持不变。

2)在模块内(但在函数体外),它的作用域范围是有限制的,即如果一个变量被声明为静态的,那么该变量可以被模块内所有的函数访问,但不能被模块外其他函数访问。它是一个本地的全局变量,如果一个函数被声明为静态的,那么该函数与普通函数作用域不同,其作用域仅在本文件中,它只可能被这一模块内的其他函数调用,不能被模块外的其他函数调用,也就是说这个函数被限制在声明它的模块的本地范围内使用。

3)内部函数应该在当前源文件中说明和定义,对于可在当前源文件以外使用的函数,应该在一个头文件中说明,使用这些函数的源文件要包含这个头文件。

拓展:

static全局变量和普通的全局变量的区别在于static全局变量只初始化一次,这样做的目的是为了防止在其他文件单元中引用。 
static局部变量和普通局部变量的区别在于static局部变量只被初始化一次,下一次的计算依据是上一次的结果值。
static()函数和普通函数的区别在于作用域不一样,static()函数只在一个源文件中有效,不能被其他源文件使用。

2、const

关键词解释
const它限定一个变量不允许被改变,产生静态作用。
使用const在一定程度上可以提高程序的安全性和可靠性。

定义
const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。

主要作用

1、可以定义const常量,具有不可变性 2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。例如: void
f(const int i) { …} 编译器就会知道i是一个常量,不允许修改;
3、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
4、节省时间和提高效率,编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

3、C语言和JAVA语言的不同点

论Java与C语言的相同点与不同点和各自的优势

首先Java和C都是指令式语言,不同的是Java有面向对象成分在里面,而C是完全面向过程的。

Java具有强大的跨平台性,即使同的操作系统都可以通过JVM来解释Java程序,只要你的计算机有Java虚拟机即可运行。而C语言则是与平台相关的,有些指令只在某些操作系统中才能执行。
具体原因是:
Java是解释型语言,所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行;
而C是编译式语言,代码要先通过编译器转换成与系统相关的中间代码,然后才能运行。正因为这样,所以Java不支持系统调用,既无法与操作系统进行交互,这是由它跨平台的特点决定的,而C则可以调用系统中的指令,如fork()。
这也就是为什么Java中只有线程概念而没有进程概念,而C语言两者均具有。

C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低。C语言最关键的是比Java多了指针,而C语言的亮点指针很容易出错,能够灵活的运用指针是件很难的事。
C语言的安全性不如Java,因为C语言没有Java的垃圾回收机制,申请的空间要手动释放。

在速度上:
C语言编写的程序要优于Java,因为Java必须运行在虚拟机的环境中,但是因为虚拟机,Java获得的平台无关性,而C语言的程序有可能需要重新修改编译才能实现平台的移植,另一方面,C语言比Java语言更“底层”,因此可以用C语言编写例如硬件的驱动,而Java却不行。
字符集不同:
Java采用Unicode字符集,C语言通常采用的是ASCII字符集,A—65,a—97。C语言的变量可以不进行初始化,但Java的变量要进行初始化。在C语言中,char类型占一个字节,在Java中char类型占2个字节。

所以JAVA更实用于开发东西,因为JAVA面向对象,和我们的思维很相似,所以开发起来就简单些,而C语言是面向过程,就和我们的思维方式有着差异,开发就很少了。而且很难。但因为C语言能够直接操作硬件,所以在一些嵌入式系统中,C语言是使用最广泛的语言

4、strcpy与memcpy区别:

1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

5、怎样摆放结构体元素让结构体占用内存最小

按变量的对齐(而非大小)从大到小或从小到大排列可达到最优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值