长期收集 C/C++ FAQ
写在前面:
论坛里总有那么一些问题是长盛不衰的,今天这个问,明天那个问,到历史帖子里一搜可以抓出来一大把。有时候这都令我怀疑是不是我们的教育体制存在问题……
于是我开了这篇文章,搜集我见到的长生不老之帖,希望可以起到参考价值。
这里使用的编译环境为 gcc/g++ 4.3.3 for ubuntu 9.04
数组名和指针的问题
这绝对是教材问题!现在国内有太多教材灌输“数组名相当于指针”的概念了!于是纷纷有人把数组名和指针等同起来,认为数组名其实就是一个指针。久而久之,许多新手已经不知道还有一种数据类型叫做“数组”了。
对于这个问题首先应该从概念上澄清,坚定不移地把数组和指针这两种类型划清界线,认识到它们虽然有千丝万缕的联系,但其实是两种不同的数据类型。就如下面所看到的:
#include <iostream>
#include <typeinfo>
using namespace std;
#define gettype(id) (cout<<typeid(id).name()<<endl)
int a;
char arrChar[10];
char str1[] = "string";
char str2[] = "string?";
char *p1 = str1;
char *p2 = str2;
int main()
{
gettype(a);
gettype(arrChar);
gettype(str1);
gettype(str2);
gettype(p1);
gettype(p2);
return 0;
}
输出为:
A10_c
A7_c
A8_c
Pc
Pc
可见,arrChar、str1、str2 的类型分别为 char [10]、char [7]、char [8],即使它们都是数组,由于大小不同,也被看作是三种不同的类型;而 p1、p2 的类型则相同,为 char*。
那么,传说的“数组名相当于指针”又是怎么一回事呢?且看 C99 标准中有关叙述:
6.2.5 Types
......
Array types are characterized by their element type and by the number of elements in the array.
......
相关文档:
在POSIX中,便有着支持正则表达式的系统函数。GNU/Linux有两套库可用于正则表达式编程:POSIX库和PCRE库。前者不需要单独安装,一般需求还是能满足的,速度稍慢些。后者是久负盛名的Perl正则表达式库,功能强大,匹配速度快,不过可能需要单独安装。
int regcomp (regex_t *compiled, const char *pattern, int cflags)
& ......
原著:Andrew Koenig - AT&T Bell Laboratories Murray Hill, New Jersey 07094
翻译:lover_P
0 简介
C语言及其典型实现被设计为能被专家们容易地使用。这门语言简洁并附有表达力。但有一些限制可以保护那些浮躁的人。一个浮躁的人可以从这些条款中获得一些帮助。
&nbs ......
C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。
由于 ......
这三章主要讲了C语言的链接、库函数、预处理。还是有点晦涩难懂啊。
一个C程序是可以有多个部分组成的,但是编译器每次只能编译一个文件,找出其中的错误。某些C语言实现提供了一个称为lint的程序,可以捕获大量的此类错误。连接器一般是与编译器分离的,编译器是把C程序“翻译”成对连 ......
刚刚看到一篇文章提出c++多态与java多态不同的地方,基本意思如下:
请看C++代码:
class Base
{
public:
Base()
{
init();
}
virtual ~Base() {}
protected:
int value;
virtual void init()
{
value = 100; &nb ......