C++复习之二

共用体

共用体union,只能存储一种数据(在某个特定的时候),因此它的长度为最大成员的长度。当数据使用多种格式但不会同时使用时,可以节省空间。

指针

指针是一个变量,存储的是值的地址,而不是值本身,所以可以修改它的值。
指针+1增加量等于它它指向的类型的字节数。eg,double* ptr = &a; ptr = ptr + 1;
在数值上增加8。

如果数据类型本身不是指针,则可以将const 数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给const指针。
当且仅当只有一层间接关系(如指针指向基本数据类型时),才可以将非const地址或指针赋给const指针。

函数指针

函数也有地址,其地址是存储其机器语言代码的内存的开始地址。
function A(){}的函数地址就是函数名A
比如:
函数原型:double A(int b);
正确的指针类型声明如下:
double (*pf)(int);
(pf)是函数,pf是函数指针//注意,*pf一定要加括号,因为后面的括号优先级比高。

内联函数

编译器将使用相同的函数代码替换函数调用。
编译器不一定会满足程序员内联函数的需求,可能认为函数过大或者函数调用了自己(内联函数不能递归,也最好不要有循环和switch等结构)。

extern C关键字

在C++文件中引用C的头文件时,需要加extern “C”关键字
cpp文件

#include <iostream>
#include "cExample.h"
//没有加extern "C"

int main(int argc, char* argv[]) {
    add(2, 3);
    return 0;
}

结果出现了:
这里写图片描述
所以正确的做法应该是:

extern "C" {
#include "cExample.h"
}

int main(int argc, char* argv[]) {
    add(2, 3);
    return 0;
}

例如int add(int a, int b)函数经过C++编译器生成.o文件后,add会变成形如add_int_int之类的, 而C的话则会是形如_add, 就是说:相同的函数,在C和C++中,编译后生成的符号不同。

这就导致一个问题:如果C++中使用C语言实现的函数,在编译链接的时候,会出错,提示找不到对应的符号。此时extern “C”就起作用了:告诉链接器去寻找_add这类的C语言符号,而不是经过C++修饰的符号。
引用自hokein‘s github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值