C++基础知识整理(一)

本文主要整理了C++中的extern "C"用于混合语言编程的原理,静态成员函数不包含this指针的特点,__cdecl和__stdcall两种调用约定的区别,数组指针与指针数组的差异,以及指针和引用的本质区别。通过这些基础知识的学习,有助于深入理解C++的底层机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  基础知识搜集整理下,以后查看复习什么的方便一点。

  1.  extern "C"使用

        主要用于混合语言编程。比如说C语言调用C++开发的DLL,由于C++语言编译后的 函数符号表是带参数类型的,而C语言编译后函数符号表是不带参数类型的。所以要想在C语言中调用C++的DLL,DLL中导出的函数必须加上extern "C".

        例:void foo(int, int )函数

        C++编译后,生成 _foo_int_int 之类的符号

        C语言编译后,生成_foo之类的符号,不带参数类型,所以C语言不支持函数重载

        有关于extern "C"的具体介绍,百度百科讲的比较详细,这里列一个链接 http://baike.baidu.com/view/2816461.htm?fromId=2814224

     2.     静态成员函数不能调用成员变量,因为不含this指针。

     3.    __cdecl 和 __stdcall

        __cdecl 是C语言函数调用约定,__stdcall 是C++函数调用约定。参数都是从右到左依次入栈,__stdcall需要在编译时就确定参数个数,因为使用该约定的函数是函数自己清栈,清栈的时候要知道参数个数。__cdecl约定的函数由调用者清栈,所以函数参数个数在编译期可以不确定,可以出现类似 int add(int a, int b, ...) 形式的函数。

     4.   数组指针和指针数组

        数组指针是一个指针,指针数组是一个数组。

        例:int a[2][2] = {{1,2}, {3,4}};

               int (*p)[2] = a;     //数组指针,只定义了一个指针p。 (*p)[0]  等价于 a[0][0], (*p)[1] 等价于 a[0][1]

               int *pp[2] ; //指针数组,[]的优先级比*的优先级高,所以先结合成p[],定义了一个指针数组,pp[0]和pp[1].

     5.   指针和引用区别

        引用是定义时就要初始化,初始化之后就不可再更改,而指针初始化之后可以更改。

        例:   int a = 5; int b = 6;

                  int &c = a;       //c是a的引用,以后c一直是a的引用,不会更改,可以理解为  int * const pp, 这个 (*pp)就等价于c;

                  int *p;              //指针可以先不初始化,只是声明

                  p = &b;           //OK,指针初始化之后还可以指向其他地址

                  c = b;              //此时c还是a的引用,只是把b的值赋给了c;该语句后,a 等于 6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值