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

一、编程语言
1.根据熟悉的语言 , 谈谈两种语言的区别?
主要浅谈下C/C++和php语言的区别:
1)PHP弱类型语言 , 一种脚本语言 , 对数据的类型不要求过多 , 较多的应用于Web应用开发 , 现在好多互联网开发公司的主流web后台开发语言 , 主要框架为mvc模型 , 如smarty,yaf , 升级的PHP7速度较快 , 对服务器的压力要小很多 , 在新浪微博已经有应用 , 对比很明显 。
2)C/C++开发语言 , C语言更偏向硬件底层开发 , C++语言是目前为止我认为语法内容最多的一种语言 。C/C++在执行速度上要快很多 , 毕竟其他类型的语言大都是C开发的 , 更多应用于网络编程和嵌入式编程 。
2.volatile是干啥用的 , (必须将cpu的寄存器缓存机制回答得很透彻) , 使用实例有哪些?(重点)
1)访问寄存器比访问内存单元要快,编译器会优化减少内存的读取 , 可能会读脏数据 。声明变量为volatile , 编译器不再对访问该变量的代码优化 , 仍然从内存读取 , 使访问稳定 。
总结:volatile关键词影响编译器编译的结果 , 用volatile声明的变量表示该变量随时可能发生变化 , 与该变量有关的运算 , 不再编译优化 , 以免出错 。
2)使用实例如下(区分C程序员和嵌入式系统程序员的最基本的问题 。):
并行设备的硬件寄存器(如:状态寄存器)
一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)
多线程应用中被几个任务共享的变量
3)一个参数既可以是const还可以是volatile吗?解释为什么 。
可以 。一个例子是只读的状态寄存器 。它是volatile因为它可能被意想不到地改变 。它是const因为程序不应该试图去修改它 。
4)一个指针可以是volatile 吗?解释为什么 。
可以 。尽管这并不是很常见 。一个例子当中断服务子程序修改一个指向一个buffer的指针时 。
下面的函数有什么错误:
int square(volatile int *ptr) {
return *ptr * *ptr;
}
下面是答案:
这段代码有点变态 。这段代码的目的是用来返指针*ptr指向值的平方 , 但是 , 由于*ptr指向一个volatile型参数 , 编译器将产生类似下面的代码:
int square(volatile int *ptr){
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}
由于*ptr的值可能被意想不到地改变 , 因此a和b可能是不同的 。结果 , 这段代码可能并不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr){
int a;
a = *ptr;
return a * a;
}
更多linux内核视频教程文本资料免费获取后台私信【内核】 。

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

文章插图
 
 
3.static const等等的用法 , (能说出越多越好)(重点)
² 首先说说const的用法(绝对不能说是常数)
1)在定义的时候必须进行初始化
2)指针可以是const 指针 , 也可以是指向const对象的指针
3)定义为const的形参 , 即在函数内部是不能被修改的
4)类的成员函数可以被声明为正常成员函数 , 不能修改类的成员变量
5)类的成员函数可以返回的是常对象 , 即被const声明的对象
6)类的成员变量是指成员变量不能在声明时初始化 , 必须在构造函数的列表里进行初始化
(注:千万不要说const是个常数 , 会被认为是外行人的!!!!哪怕说个只读也行)
下面的声明都是什么意思?
const int a; a是一个正常整型数
int const a; a是一个正常整型数
const int *a; a是一个指向常整型数的指针 , 整型数是不可修改的 , 但指针可以
int * const a; a为指向整型数的常指针 , 指针指向的整型数可以修改 , 但指针是不可修改的
int const * a const; a是一个指向常整型数的常指针 , 指针指向的整型数是不可修改的 , 同时指针也是不可修改的
通过给优化器一些附加的信息 , 使用关键字const也许能产生更紧凑的代码 。合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数 , 防止其被无意的代码修改 。简而言之 , 这样可以减少bug的出现 。


推荐阅读