一、指针解引用
int value = 42;
int* ptr = &value; // ptr指向value的地址,这个是模版用法,不涉及语法,背下来就好
// 显式解引用指针来访问指向的对象
int dereferencedValue = *ptr; // 解引用ptr获取value的值
std::cout << dereferencedValue; // 输出:42
二、指针传参和引用传参
两种传参方式的函数定义(在void后面)和传参方式(在main函数中)都不一样。
引用传参不会进行额外的内存拷贝,因此通常被称为"零拷贝"。它通过在函数参数中声明引用来直接引用原始对象,并在函数内部对原始对象进行操作。这意味着在函数内部对引用进行的任何修改都会直接影响原始对象。引用传参不会创建新的对象副本,因此它是一种高效的参数传递方式。
指针传参需要在内存中创建一个指针副本,这涉及到内存拷贝。指针传参通过在函数参数中声明指针来传递对象的地址。在函数内部,可以通过解引用指针来操作对象。指针传参允许对指针进行重新赋值,从而可以指向不同的对象。指针传参的副本的生存周期取决于它在堆区还是栈区。
class ExampleClass {
int value;
};
//引用传参
void ModifyObjectByReference(ExampleClass& instance, int newVal) {
instance.value = newVal;
}
//指针传参
void ModifyObjectByPointer(ExampleClass* instance, int newVal) {
instance->value = newVal;
}
int main() {
ExampleClass obj(42);
ModifyObjectByReference(obj, 100);
std::cout << obj.value << std::endl; // 输出:100
ModifyObjectByPointer(&obj, 200);
std::cout << obj.value << std::endl; // 输出:200
return 0;
}
三、宏
在 C/C++ 中,宏(Macro)是一种预处理指令,用于在编译之前对源代码进行文本替换。宏可以定义为简单的文本片段、函数或带参数的代码块,并且可以在程序中多次使用。
#define PI 3.14159
//甚至在方舟进行时的编译里面还有这样的,将双下划线定义为assembler类+成员引用符号
#define __ assembler->