22
2020
02

do……while和while……do有什么区别?

答:前一个循环一遍再判断,后一个判断以后再循环 
22
2020
02

语句for( ;1 ;)有什么问题?它是什么意思?

答:和while(1)相同。
22
2020
02

全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?

答:可以,在不同的C文件中以static形式来声明同名全局变量。   可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 。
22
2020
02

如何引用一个已经定义过的全局变量?

答:extern。  可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。          头文件引用在编译期间报错,extern方式在连接期间报错。
22
2020
02

局部变量能否和全局变量重名?

答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: "。  局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 
21
2020
02

简述 strcpy、sprintf 与 memcpy 的区别

三者主要有以下不同之处:(1) 操作对象不同,strcpy 的两个操作对象均为字符串,sprintf 的操作源对象可以是多种数据类型,目的操作对象是字符串,memcpy 的两个对象就是两个任意可操作的内存地址,并不限于何种数据类型。(2) 执行效率不同,memcpy 最高,strcpy 次之,sprintf 的效率最低。(3) 实现功能不同,strcpy 主要实现字符串变量间的拷贝,sprintf 主要实现其他数据类型格式到字符串的转化,memcpy 主要是内存块间的拷贝。说明:strcpy、s
21
2020
02

简述 C、C++程序编译的内存分配情况

C、C++中内存分配方式可以分为三种:(1) 从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static 变量等。(2) 在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3) 从堆上分配:即动态内存分配。程序在运行的时候用 malloc 或 new 申请任意大小的内存,程序员自己
21
2020
02

a 和&a 有什么区别

请写出以下代码的打印结果,主要目的是考察 a 和&a 的区别。#include<stdio.h> void main( void ) {   int a[5]={1,2,3,4,5};   int *ptr=(int *)(&a+1);  printf("%d,%d",*(a+1),*(ptr-1));   return; } 输出结果:2
21
2020
02

一个指针可以是 volatile 吗

可以,因为指针和普通变量一样,有时也有变化程序的不可控性。常见例:子中断服务子程序修改一个指向一个 buffer 的指针时,必须用 volatile 来修饰这个指针。说明:指针是一种普通的变量,从访问上没有什么不同于其他变量的特性。其保存的数值是个整型数据,和整型变量不同的是,这个整型数据指向的是一段内存地址。
21
2020
02

写一个“标准”宏 MIN

#define min(a,b)((a)<=(b)?(a):(b))注意:在调用时一定要注意这个宏定义的副作用,如下调用:((++*p)<=(x)?(++*p):(x)。p 指针就自加了两次,违背了 MIN 的本意。