cpp简单回顾

2022-07-30 08:46 Saturday7922min
CC BY 4.0(除特别声明和转载)

关于指针

//指针可看作一个数字的容器,其中保存的是 相应类型的变量 的地址
LNode *p;//定义一个指针变量p
p = (LNode *)malloc(sizeof(LNode));//为指针赋值,在此处为 指向malloc分配的 一片LNode类型大小的 内存空间 的首地址
p->data = 1;
LNode q = *p; //在指针前的 * 表示解引用,*p即表示p所指向的内存空间中的LNode对象 

关于 ->

LNode *p;
p->next 等价于 (*p).next //->是解引用后获取成员变量的同义词

关于函数参数列表中的&

[!tip]
可以理解为使用&时,对象在利用函数 对象利用他人得到好处
不使用&时,函数在利用对象 对象被利用了没得到好处

//&表示传入对象的引用,函数实际在真实地操作传入的对象本体
//在不使用&的情况下,函数中操作的对象为传入的对象的复制体,对象本体并不受影响;在函数执行完成后,复制体在函数栈中被销毁
void InitList(Sqlit &L)//顺序表初始化
{
    for (int i = 0; i < MaxSize; i++)
        L.data[i] = 0; //将所有数据元素设置为默认值
    L.length = 0;      //顺序表初始化长度为0
}

关于数组

cpp中的数组在作为参数传递时采取的方式为传递数组的首地址,所以数组作为输入参数,在函数中操作的是数组本身而非栈内临时变量。

关于 NULL 与 Nullptr

在<stddef.h>中可以看到如下定义

#undef NULL  
#if defined(__cplusplus)  
#define NULL 0  
#else  
#define NULL ((void *)0)   #endif

从定义中可以看出,C++ 中NULL 存在二义性,NULL 其实就是 0,但是也可以用作空指针,只是用作空指针可能是为了兼容 C,迫于无奈。nullptr 则是空指针的意思

[!tip] 推荐
只有,数值判断使用0,空指针判断使用nullptr不要使用 NULL

关于结构体

不去比较与C语言的区别了,主要注意CPP中结构体的使用,
定义与使用:

struct Point {
	int x;
	int y;
	Point *next;
};
Point startPoint;

typedef struct Node {
	char ch;
	StringNode* next;
}StringNode, * String;

Node startNode;
StringNode endNode;
String string;

足矣。

当然还有无聊的瞎搞:

struct Point {//struct后可以不定义类型名,但是有什么意义呢,写上就好,没必要记什么奇异写法
	int x;
	int y;
	Point* next;
}startPoint;
startPoint.x = 1;
BuyMeACola