C的函数指针很强大,用好了才是C语言的高手。像Gtk中的回调函数的使用,都体现了函数指针的强大威力。
struct Point{
int x, y;
};
/*Shape*/
/*----------------------------------------------------------------*/
struct Shape {
struct Methods* methods;
};
struct Methods {//将C++对应类中所有成员函数封装到一个结构体里面
float (*getCircle)(Shape * shape);
float (*getArea)(Shape * shape);
void (*draw)(Shape * shape);
void (*move)(Shape * shape);
};
////////////////C++ Counterpart of above code//////////////////
class Shape {
public:
virtual float getCircle() = 0;
virtual float getArea() = 0;
virtual void draw() = 0;
virtual void move() = 0;
};
///////////////////////////////////////////////////////////////
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*---------------------------------------- ......
C的函数指针很强大,用好了才是C语言的高手。像Gtk中的回调函数的使用,都体现了函数指针的强大威力。
struct Point{
int x, y;
};
/*Shape*/
/*----------------------------------------------------------------*/
struct Shape {
struct Methods* methods;
};
struct Methods {//将C++对应类中所有成员函数封装到一个结构体里面
float (*getCircle)(Shape * shape);
float (*getArea)(Shape * shape);
void (*draw)(Shape * shape);
void (*move)(Shape * shape);
};
////////////////C++ Counterpart of above code//////////////////
class Shape {
public:
virtual float getCircle() = 0;
virtual float getArea() = 0;
virtual void draw() = 0;
virtual void move() = 0;
};
///////////////////////////////////////////////////////////////
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/*---------------------------------------- ......
(本文源自http://www.weste.net/2006/2-20/13432127659.html )
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。
找错题
试题1 :
void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
试题2 :
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}
试题3 :
void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
解答:
试题1字符串str1需要11个字 ......
(本文源自http://www.weste.net/2006/2-20/13432127659.html )
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到 strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。
找错题
试题1 :
void test1()
{
char string[10];
char* str1 = "0123456789";
strcpy( string, str1 );
}
试题2 :
void test2()
{
char string[10], str1[10];
int i;
for(i=0; i<10; i++)
{
str1[i] = 'a';
}
strcpy( string, str1 );
}
试题3 :
void test3(char* str1)
{
char string[10];
if( strlen( str1 ) <= 10 )
{
strcpy( string, str1 );
}
}
解答:
试题1字符串str1需要11个字 ......
符号
C- 意思是按住 Ctrol 键
M- 意指 Meta 键 (键盘上若无Meta 键,则可以ALT ESC 键来取而代之)
DEL 意指退格键 (不是 删除(Delete) key)
RET 意指回车键
SPC 意指空格键
ESC 意指Escape键
TAB 意指Tab键
像 "C-M-" (or "M-C") 这样连在一起的意味着同时按住 Control 和 Meta 键不放.
用方向键
C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方向键是一样的,如下图所示:
上一行 C-p (Prev line)
.
.
......
符号
C- 意思是按住 Ctrol 键
M- 意指 Meta 键 (键盘上若无Meta 键,则可以ALT ESC 键来取而代之)
DEL 意指退格键 (不是 删除(Delete) key)
RET 意指回车键
SPC 意指空格键
ESC 意指Escape键
TAB 意指Tab键
像 "C-M-" (or "M-C") 这样连在一起的意味着同时按住 Control 和 Meta 键不放.
用方向键
C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方向键是一样的,如下图所示:
上一行 C-p (Prev line)
.
.
......
复杂的C\C++声明,常出现在学校的考卷,面试题或是牛人老外的代码中。
我们在实际的工作中,应该尽可能少使用复杂的声明。复杂的声明,会让阅读您代码的人很是郁闷。
虽然不使用这种复杂的声明,但还是应该把将如何解析这种复杂的声明的方法记在心中。
所以,我把这种方法记录下来,以备不时之需。
入门题
1) 一个整型数(An integer)
答:int n
2) 一个指向整型数的指针(A pointer to an integer)
答:int *p
3) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
答:int **p
4) 一个有10个整数的数组(An array of 10 integers)
答:int a[10]
5) 一个有着10个元素的数组,每个元素都是一个指向整形数的指针(An array of 10 pointers to integers)
答:从第1题至第4题,都是一眼能看出来的。第5题就需要注意。
我将第5题的题目按如下解读:
a.从外往内进行解读
b.有一个10个元素的数组:typedef P (a[10])
c.每个元素都是一个指向整形数的指针:int *P
d.从下往上进行嵌套~
e.所以答案为int *(a[10]) = int *a[10]
6) 一个指向有10个整型数数组的指针(A pointer to an array of ......
复杂的C\C++声明,常出现在学校的考卷,面试题或是牛人老外的代码中。
我们在实际的工作中,应该尽可能少使用复杂的声明。复杂的声明,会让阅读您代码的人很是郁闷。
虽然不使用这种复杂的声明,但还是应该把将如何解析这种复杂的声明的方法记在心中。
所以,我把这种方法记录下来,以备不时之需。
入门题
1) 一个整型数(An integer)
答:int n
2) 一个指向整型数的指针(A pointer to an integer)
答:int *p
3) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
答:int **p
4) 一个有10个整数的数组(An array of 10 integers)
答:int a[10]
5) 一个有着10个元素的数组,每个元素都是一个指向整形数的指针(An array of 10 pointers to integers)
答:从第1题至第4题,都是一眼能看出来的。第5题就需要注意。
我将第5题的题目按如下解读:
a.从外往内进行解读
b.有一个10个元素的数组:typedef P (a[10])
c.每个元素都是一个指向整形数的指针:int *P
d.从下往上进行嵌套~
e.所以答案为int *(a[10]) = int *a[10]
6) 一个指向有10个整型数数组的指针(A pointer to an array of ......
9月都快结束了,之前一直忙到写自己的东西加上上班。基本没有时间研究下汇编和C C++方面的感兴趣的东西。再怎么说嘛,9月还是得写一篇撒,以后每月至少一篇吧。给自己定了,希望大家监督。嘿嘿!
这篇文章就来谈谈平常很常见的HOOK技术,这里呢。写得比较简单,方法很多。只讲原理!希望大鸟们别吐我口水哈 - -。好!切入正题。
首先是概念吧。什么是钩子(HOOK)?
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
这上面只是一个概念,对它有所了解而已。上面主要应用在Windows消息处理机制里面的一个解释。这里我只是单纯的谈谈拦截我们常用的LoadLibraryA加载这个函数。让我们的程序或者目标程 ......
9月都快结束了,之前一直忙到写自己的东西加上上班。基本没有时间研究下汇编和C C++方面的感兴趣的东西。再怎么说嘛,9月还是得写一篇撒,以后每月至少一篇吧。给自己定了,希望大家监督。嘿嘿!
这篇文章就来谈谈平常很常见的HOOK技术,这里呢。写得比较简单,方法很多。只讲原理!希望大鸟们别吐我口水哈 - -。好!切入正题。
首先是概念吧。什么是钩子(HOOK)?
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
这上面只是一个概念,对它有所了解而已。上面主要应用在Windows消息处理机制里面的一个解释。这里我只是单纯的谈谈拦截我们常用的LoadLibraryA加载这个函数。让我们的程序或者目标程 ......
今天装好了monodevelop,本来是想用来C#的,见他也支持C/C++开发,于是试了一下,感觉很不错,终于找到了linux下一个比较满意的C++开发环境。
以前写C++都是在Eclipse下写的,但Eclipse启动慢,配置麻烦,和java一起用的时候很容易出错,用的很不爽,当然更不喜欢文本编辑。
monodevelop用起来界面很简洁,很干净,用gcc g++作为编译器,用起来很方便。功能上似乎没有VC++那么强大,但绝对够用了。
写一个helloworld
如果没有安装gcc g++
yum install gcc gcc-c++
monodevelop 欢迎界面
new ->solution
new ->file
选择 :空C++源文件
build ----- run
......
今天装好了monodevelop,本来是想用来C#的,见他也支持C/C++开发,于是试了一下,感觉很不错,终于找到了linux下一个比较满意的C++开发环境。
以前写C++都是在Eclipse下写的,但Eclipse启动慢,配置麻烦,和java一起用的时候很容易出错,用的很不爽,当然更不喜欢文本编辑。
monodevelop用起来界面很简洁,很干净,用gcc g++作为编译器,用起来很方便。功能上似乎没有VC++那么强大,但绝对够用了。
写一个helloworld
如果没有安装gcc g++
yum install gcc gcc-c++
monodevelop 欢迎界面
new ->solution
new ->file
选择 :空C++源文件
build ----- run
......
今天装好了monodevelop,本来是想用来C#的,见他也支持C/C++开发,于是试了一下,感觉很不错,终于找到了linux下一个比较满意的C++开发环境。
以前写C++都是在Eclipse下写的,但Eclipse启动慢,配置麻烦,和java一起用的时候很容易出错,用的很不爽,当然更不喜欢文本编辑。
monodevelop用起来界面很简洁,很干净,用gcc g++作为编译器,用起来很方便。功能上似乎没有VC++那么强大,但绝对够用了。
写一个helloworld
如果没有安装gcc g++
yum install gcc gcc-c++
monodevelop 欢迎界面
new ->solution
new ->file
选择 :空C++源文件
build ----- run
......