1、假设某个C函数的声明如下:
1
|
void
foo(
int
x);
|
函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号 extern "C" 来解决这个问题。例如:
1
2
3
4
5
|
extern
"C"
{
void
foo(
int
x);
...
}
|
或者写成
1
2
3
4
5
|
extern
"C"
{
#include "myHeader.h"
..
//其他C头文件
}
|
这就告诉C++编译器,函数foo是个C连接,应该到库中找名字_foo 而不是找 _foo_int 。C++编译器开发商已经对C标准库的头文件作了extern "C"处理,所以可以用#include 直接引用这些头文件。
2、指针
(1)指针变量初始化的方法:
1
2
|
int
a;
int
*p = &a;
|
(2)赋值语句的方法:
1
2
3
|
int
a;
int
*p;
p = &a;
|
不允许把一个数赋予指针变量,故下面的赋值是错误的:
1
2
|
int
*p;
p = 100;
|
被赋值的指针变量前不能再加”*“说明符,如写成 *p = &a 也是错误的。
(3)打印:
1
2
|
int
a, *p = &a;
printf
(
"%d"
, *p);
|
(4)运算:
1
2
3
4
5
|
int
a=10, b=20, s, t, *pa, *pb;
pa = &a;
pb = &b;
s = *pa + *pb;
t = *pa * *pb;
|
(5)通过结构指针变量访问结构变量成员:
1
|
p->num;
//(*p).num
|
3、联合类型
在”联合“中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。