C++ 常记知识点

1、如果.h文件中声明了一个static全局变量,且多个源文件中使用#include包含了该头文件,则:

多个源文件中都包含一份单独的拷贝,且初始值相同。这些拷贝之间相互独立,如果改变其中某个静态全局变量的值,不会影响静态全局变量的其他拷贝。

2、内联函数和宏定义的区别:

  • 内联函数:在编译阶段展开;是一个函数,具有函数的基本性质,可以像普通函数一样调试;作为类的成员函数时,可以访问类成员,this指针也可以使用。
  • 宏定义:在预处理阶段展开;仅仅是字符串替换;宏定义函数无法成为类的成员函数

3、sizeof

  • 是一个单目运算符,并不是一个函数;
  • sizeof可以返回结构体的大小,但是不能返回结构体成员变量的大小。

4、内存对齐

  • 数据对齐:在处理结构体中的成员时,成员在内存中的起始地址编码必须是成员类型所占字节数整数倍
  • 结构体sizeof计算的结果,必须是结构体中,占用空间最多的成员所占空间的整数倍

5、main函数执行前后发生了什么?

执行之前:调用全局对象和静态对象的构造函数;初始化基本数据类型全局变量和静态变量

执行之后:调用在atexit函数中注册的函数,调用顺序和注册顺序相反

6、内容相同的字符串常量,在字符串常量区中只有一份拷贝

7、当数组名作为参数时,相当于传递了数组首元素的地址,而且只要实参是地址,那么形参一定是指针。

一下四种声明方式是等价的:

void equal(int* a, int* b);
void equal(int a[], int b[]);
void equal(int a[1], int b[2]);
void equal(int a[100], int b[100]);

8、 句柄

句柄是一个32位的无符号整数,是一个对象的内存地址列表的整数索引,是分配给资源的唯一标识。(这里的对象是指:诸如应用程序实例、窗口、位图、GDI之类的资源对象)

句柄不是直接指向资源对象,而是保存着一个资源对象资源注册列表中的索引。解决的是资源对象物理地址发生变化导致的访问失效问题

句柄和指针的区别:

  • 使用上:指针可以直接修改指针指向的内容;句柄只能调用一些Windows提供的API函数,防止用户随意修改系统资源。
  • 概念是:指针可以随意指向一个对象;句柄只能间接的指向资源对象。

9、函数指针

定义函数指针时,需要指明所指向函数的返回值类型参数列表类型

数据类型(* 指针变量)(参数列表)

int max(int a, int b);
int(*p)(int, int);
p = max;
int z = p(1, 2);

10、常量引用

不可以使用:

int &a = 10;

需要使用常量引用

const int &a = 10;

实际上,编译器内部是分两步执行的:

  1. 首先,将常量存放在一个临时变量中;
  2. 然后,使用这个临时变量初始化常量引用。
int temp = 10;
const int &a = temp;

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值