首页 > 代码库 > C/C++ 学习笔记

C/C++ 学习笔记

1、假设某个C函数的声明如下:

void foo(int x);

    函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一个C连接交换指定符号 extern "C" 来解决这个问题。例如:

extern "C"
{
    void foo(int x);
    ...
}

或者写成

extern "C"
{
#include "myHeader.h"
..//其他C头文件
}

    这就告诉C++编译器,函数foo是个C连接,应该到库中找名字_foo 而不是找 _foo_int 。C++编译器开发商已经对C标准库的头文件作了extern "C"处理,所以可以用#include 直接引用这些头文件。


2、指针

(1)指针变量初始化的方法:

int a;
int *p = &a;

(2)赋值语句的方法:

int a;
int *p;
p = &a;

    不允许把一个数赋予指针变量,故下面的赋值是错误的:

int *p;
p = 100;

    被赋值的指针变量前不能再加”*“说明符,如写成 *p = &a 也是错误的。

(3)打印:

int a, *p = &a;
printf("%d", *p);

(4)运算:

int a=10, b=20, s, t, *pa, *pb;
pa = &a;
pb = &b;
s = *pa + *pb;
t = *pa * *pb;

(5)通过结构指针变量访问结构变量成员:

p->num;    //(*p).num


3、联合类型

    在”联合“中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。

C/C++ 学习笔记