如何理解c/c++和php语言的区别( 二 )


Const如何做到只读?
这些在编译期间完成 , 对于内置类型 , 如int ,  编译器可能使用常数直接替换掉对此变量的引用 。而对于结构体不一定 。
² 再说说static的用法(三个明显的作用一定要答出来)
1)在函数体内 , 一个被声明为静态的变量在这一函数被调用过程中维持其值不变 。
2)在模块内(但在函数体外) , 一个被声明为静态的变量可以被模块内所用函数访问 , 但不能被模块外其它函数访问 。它是一个本地的全局变量 。
3)在模块内 , 一个被声明为静态的函数只可被这一模块内的其它函数调用 。那就是 , 这个函数被限制在声明它的模块的本地范围内使用
4)类内的static成员变量属于整个类所拥有 , 不能在类内进行定义 , 只能在类的作用域内进行定义
5)类内的static成员函数属于整个类所拥有 , 不能包含this指针 , 只能调用static成员函数
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
static全局变量与普通的全局变量有什么区别:static全局变量只初始化一次 , 防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次 , 下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份 , 普通函数在每个被调用中维持一份拷贝
4.extern c 作用
告诉编译器该段代码以C语言进行编译 。
5.指针和引用的区别
1)引用是直接访问 , 指针是间接访问 。
2)引用是变量的别名 , 本身不单独分配自己的内存空间 , 而指针有自己的内存空间
3)引用绑定内存空间(必须赋初值) , 是一个变量别名不能更改绑定 , 可以改变对象的值 。
总的来说:引用既具有指针的效率 , 又具有变量使用的方便性和直观性
6. 关于静态内存分配和动态内存分配的区别及过程
1) 静态内存分配是在编译时完成的 , 不占用CPU资源;动态分配内存运行时完成 , 分配与释放需要占用CPU资源;
2)静态内存分配是在栈上分配的 , 动态内存是堆上分配的;
3)动态内存分配需要指针或引用数据类型的支持 , 而静态内存分配不需要;
4)静态内存分配是按计划分配 , 在编译前确定内存块的大小 , 动态内存分配运行时按需分配 。
5)静态分配内存是把内存的控制权交给了编译器 , 动态内存把内存的控制权交给了程序员;
6)静态分配内存的运行效率要比动态分配内存的效率要高 , 因为动态内存分配与释放需要额外的开销;动态内存管理水平严重依赖于程序员的水平 , 处理不当容易造成内存泄漏 。
7. 头文件中的 ifndef/define/endif 干什么用
预处理 , 防止头文件被重复使用 , 包括pragma once都是这样的
8. 宏定义求两个元素的最小值
#define MIN(A,B) ((A) <= (B) ? (A) : (B))
9. 分别设置和清除一个整数的第三位?
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void){
a |= BIT3;
}
void clear_bit3(void){
a &= ~BIT3;
}
10. 用于处理指令#define 声明一个常数 , 用以表明1年中有多少秒
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
11. 预处理器标识#error的目的是什么?
抛出错误提示 , 标识外部宏是否被定义!
12. 嵌入式系统中经常要用到无限循环 , 你怎么样用C编写死循环呢?
记住这是第一个方案!!!!
while(1)
{
}
一些程序员更喜欢如下方案:
for(;;){
}
汇编语言的无线循环是:
Loop:
...
goto Loop;
13. 用变量a给出下面的定义
一个有10个指针的数组 , 该指针指向一个函数 , 该函数有一个整型参数并返回一个整型数 int (*a[10])(int);
14. 中断是嵌入式系统中重要的组成部分 , 这导致了很多编译开发商提供一种扩展—让标准C支持中断 。具代表事实是 , 产生了一个新的关键字 __interrupt


推荐阅读