关于指针
//指针可看作一个数字的容器,其中保存的是 相应类型的变量 的地址
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;