\(\texttt{titile}\)
计概与数算行末不要空格!!!
字符串与字符数组读入
cin >> str //字符与字符串,不含空格、制表符与换行
scanf("%c", &ch) //读单个字符 ch
scanf(" %c", &ch) //字符数组,忽略前面的空格与换行
scanf(",%c", &ch) //字符数组,忽略前面的 ','
scanf("%s", str) //字符数组,不含空格与换行
scanf("%[^\n]%*c", str) //字符数组,可读空格,直至换行结束,'%*c' 抑制符,读换行但不存储
getline(cin, str) //读整行,包括空格,至换行,不含换行
cin.ignore() // 忽略缓冲区中的换行符,防止 getline 读空行
fgets(str, sizeof str, stdin) //读整行,包括空格,至换行,含换行
类(class)
基本用法与结构体相同
class A {private:int a, f[N];public:A(){}A(int aa):a(aa){} //初始化~A(){delete a; delete [] f;} //析构函数,delete 释放内存friend class B; //友元声明,类 B 可访问 private 成员函数
};
指针与引用 传参
指针是一种数据类型,传参时是副本,可&取地址后传递,但要参数定义为双重指针(双*),此时修改原变量
引用是变量的别名,引用取变量的地址,会直接修改原变量
int* a;
(*a) = 100; //解引用赋值
a //内存地址
a = new int; //申请空间
delete a; //delete 释放内存,变为野指针,NULL 为空指针,不指向内存
printf("%p", (void*)a); //打印指针 a 本身存储的地址,void* 只存储一个内存地址,无谓数据类型int* a;
a = new int [100];
void fun(int* a) {}
fun(a) //传递数组 a 首位地址,会修改原始数组 aclass Node {private:int info;Node* nxt;
};
Node* head;
head->info; //访问成员
(*head).info; //同上,解引用后再访问void fun(Node* &head){}
fun(head); //会修改原 headint a;
void fun(int &a){}
fun(a); //会修改原 a