总结一下一些简单但是自己又不清楚的知识点(华为题目)
2010-07-30 21:09
435 查看
1、在c语言库函数中将一个字符转换成整型的函数是atool(),程序举例
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *str = "98765432 ";
l = atol(str);
printf( "string = %s integer = %ld/n ", str, l);
return(0);
}
2、对于一个频繁使用的短小函数,在C语言中用宏定义实现,在C++中用inline(内联函数)实现。
#include <iostream>
#include <string>
using namespace std;
inline string dbtest(int a); //函数原形声明为inline即:内联函数
void main()
{
for (int i=1;i<=10;i++)
{
cout << i << ":" << dbtest(i) << endl;
}
cin.get();
}
string dbtest(int a)//这里不用再次inline,当然加上inline也是不会出错的
{
return (a%2>0)?"奇":"偶";
} 上面的例子就是标准的内联涵数的用法,使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部所有调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
说到这里很多人可能会问,既然inline这么好,还不如把所谓的函数都声明成inline,嗯,这个问题是要注意的,inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能直接调用递归函数(自己内部还调用自己的函数)。
说到这里我们不得不说一下在c语言中广泛被使用的#define语句,是的define的确也可以做到inline的这些工作,但是define是会产生副作用的,尤其是不同类型参数所导致的错误,由此可见inline有更强的约束性和能够让编译器检查出更多错误的特性,在c++中是不推荐使用define的。
3、接入网用的是什么接口?
V5接口
4、voip都用了那些协议? H.323协议簇、SIP协议、Skype协议、H.248和MGCP协议
5、确定模块的功能和模块的接口是在软件设计的那个队段完成的?
概要设计阶段
6、内存对齐问题
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; double dog; DATE cow; };
DATE max;
printf( "%d/n ",sizeof(struct data));
}
union DATA 占空间20,但实际上它是不参与内存对齐的。也就是说,不需要是20的倍数。
int cat 占4位
double dog 占8位,但前面是4位,所以要往后移动4位,此时占用16位,
DATE cow 占 20 位, 结果是 36 不是8 的倍数,所以再加4 变成40
struct data { int cat; DATE cow; double dog; };
int cat 占4位
DATE cow 占20 此时占用24 位正好是8的倍数。
double dog 占 8 ,所以结果是 32
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long l;
char *str = "98765432 ";
l = atol(str);
printf( "string = %s integer = %ld/n ", str, l);
return(0);
}
2、对于一个频繁使用的短小函数,在C语言中用宏定义实现,在C++中用inline(内联函数)实现。
#include <iostream>
#include <string>
using namespace std;
inline string dbtest(int a); //函数原形声明为inline即:内联函数
void main()
{
for (int i=1;i<=10;i++)
{
cout << i << ":" << dbtest(i) << endl;
}
cin.get();
}
string dbtest(int a)//这里不用再次inline,当然加上inline也是不会出错的
{
return (a%2>0)?"奇":"偶";
} 上面的例子就是标准的内联涵数的用法,使用inline修饰带来的好处我们表面看不出来,其实在内部的工作就是在每个for循环的内部所有调用dbtest(i)的地方都换成了(i%2>0)?"奇":"偶"这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
说到这里很多人可能会问,既然inline这么好,还不如把所谓的函数都声明成inline,嗯,这个问题是要注意的,inline的使用是有所限制的,inline只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如while、switch,并且内联函数本身不能直接调用递归函数(自己内部还调用自己的函数)。
说到这里我们不得不说一下在c语言中广泛被使用的#define语句,是的define的确也可以做到inline的这些工作,但是define是会产生副作用的,尤其是不同类型参数所导致的错误,由此可见inline有更强的约束性和能够让编译器检查出更多错误的特性,在c++中是不推荐使用define的。
3、接入网用的是什么接口?
V5接口
4、voip都用了那些协议? H.323协议簇、SIP协议、Skype协议、H.248和MGCP协议
5、确定模块的功能和模块的接口是在软件设计的那个队段完成的?
概要设计阶段
6、内存对齐问题
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; double dog; DATE cow; };
DATE max;
printf( "%d/n ",sizeof(struct data));
}
union DATA 占空间20,但实际上它是不参与内存对齐的。也就是说,不需要是20的倍数。
int cat 占4位
double dog 占8位,但前面是4位,所以要往后移动4位,此时占用16位,
DATE cow 占 20 位, 结果是 36 不是8 的倍数,所以再加4 变成40
struct data { int cat; DATE cow; double dog; };
int cat 占4位
DATE cow 占20 此时占用24 位正好是8的倍数。
double dog 占 8 ,所以结果是 32
相关文章推荐
- 【转载,自己做了些批注】重学C++ Primer后一些基本知识点注意点总结
- java基础的一些题目(自己总结)
- kindeditor本身支持上传flash功能,但是我们经常需要上传一些flv、mp4或则其它格式的视频。 其实具体的播放功能是通过jwplayer实现的。我只对kindeditor简单的修改了一下
- saltstack一些简单总结--利用saltstack的event实现自己的功能(2)
- 总结一下自己Java实习后遇到的一些问题。
- 根据自己的经历总结一些安卓工程师的面试经验和题目
- 简单递推 学到的一些皮毛,总结一下
- 一些简单,但是常用到,又容易遗忘的知识点
- 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的
- 一些自己不太常用,但是却很有用的知识点
- 总结&分享一下自己最近的一些收获
- 给自己做的项目添加开机动画,只是一个简单的添加方法,如果系统的方法太麻烦的画,就试试我这个吧,但是如果是想专业一些的话,还是学习系统的吧!!!
- 一些简单但是常见的算法题目(笔记类)
- 【总结】总结一下自己动手尝试实现的一些小Demo
- 从网上看到一些文章,自己再总结一下,在学习编程中一些要点
- 总结一下自己在vmwareplayer虚拟机安装,Nginx安装,虚拟机文件访问的一些问题
- 自己总结的Mysql一些简单操作
- C++一些知识点的简单总结
- poj1661-这题目简单dp但是要考虑情况比较多,wa了n次死在了自己定义的无穷大上面
- 一直都想总结一下自己遇到过的web安全方面的问题--2015-03-31