广西网站建设价格ppt模板免费下载图片
一.输入密码时候,隐藏密码
- 用函数getch(),头文件#include<conio.h>
 - 输入一个字符时候不会回显,getc会回显
 - 实现思路: 输入一个字符,由于不知道密码长度,所以设置为死循环,如果不是回车键,即将该字符添加到存放密码的数组里,顺便打印一个星号,如果输入的为回车键,由于getch()函数读入回车键时候,返回的是\r,所以如果是\r,则将字符数组的末尾加上\0,再跳出循环
 
//密码输入
void Input_pwd(char* pwd,int size) {char c = 0;int i = 0;while (1) {c = getch();//不会回显if (c == '\r') {//getch函数读到回车符号为\rpwd[i] = '\0';break;}else {cout << '*';pwd[i++] = c;}}cout << endl;
} 
二.解决多文件开发头文件重复包含的方法
- 由于使用多文件开发,需要再cpp文件里面包含.h文件,再将多个.h文件相互包含,可能会出现重复包含的情况,
 - 解决方法 : VS里面特定的方式是,在.h文件的开头加上 #pragma once
 - 公用方法 :在.h文件里面用宏定义, 
#例如在cs.h文件内,宏名一般用该格式,没要求 #ifndef _CS_H_ #define //代码块#endif//对应的是ifndefine 
三.指针数组与数组指针
- 数组指针 例如 int (*p)[3];
 - 数组指针访问方法 ( p  = &A[0] ) 
- 数组法 : (*p)[j];
 - 指针法 : *((*p)+j) *( *(p + i) + j)
 
 - 指针数组 例如 int *p[3];.每个元素都是一个变量的地址
 
四.void空指针
- 其他类型可以自动转换为void类型,但是void类型要转换成其他类型需要强制类型转换
 - 空指针不允许进行算术运算,因为大小不知道
 - 空指针里面仍然存储的是变量的地址,只是类型不知道
 
	int a = 10;int *p1 = &a;void* p = &a;//cout << *p << endl; error 空指针//p1 = p;//errorp1 = (int *)p;//需要进行强制类型转换p = p1;//可以,其他类型可以转换为空指针 
5.函数指针
- 函数指针的定义 : 把函数声明移过来,把函数名改为(* 函数指针名)
 
例如
//函数
int compare_int (const int *,const int *);//该函数的指针 int (*fp) (const int *,const int *);//给该指针赋值fp = &compare_int;//传参数两种方式(*fp)(&x,&y);//第一种,按普通指针解引的方式进行调用
fp(&x,&y);//第二种,直接调用//(*fp)等同于compare_int 
- qsort()函数 
- 语法 qsort(数组名,数组元素个数,每个元素占的字节,cmp函数);
 - qsort参数为void类型指针,可以比较任何数据类型
 - cmp函数格式
 
 
int cmp(const void *a, const void *b) {return *(int*)a - *(int*)b ;//由小到大排序//换成b-a之后是从大到小排列
} 
- 测试 :
 
int cmp(const void *a, const void *b) {return *(int*)b - *(int*)a ;
}
int main() {int q[2] = { 1,2 };qsort(q, sizeof(q) / sizeof(int), sizeof(int), &cmp);cout << q[0] << " " << q[1] << endl;} 
- 字符比较,混杂大小写,在比较时候不考虑大小写的方法
 

六.引用类型
- 引用变量本身也会占内存,内存的大小等于一个指针变量的大小
 - 对同一内存空间可以取好几个别名
 - 引用可以定义多个,引用也有自己的空间,引用变量像常指针,编辑器在编译时会将引用改为指针
 - 在c++的底层引用就是用指针实现的 Type& name <-----> Type* const name
 - 在使用的角度,引用会让人误会是一个别名,没有自己的存储空间,这是c++为了实用性而做出的细节隐藏
 
#include <iostream>
#include <stdio.h>using namespace std;
int swap1(int& a, int& b) {int temp = a;a = b;b = temp;return 0;
}int swap2(int* const a, int* const b) {int temp = *a;*a = *b;*b = temp;return 0;
}
int main() {int x = 10;int y = 100;swap1(x, y);cout << "x = " << x << " y = " << y << endl;swap2(&x, &y);cout << "x = " << x << " y = " << y << endl;
}//编辑器会将引用类型的swap1在编译时候转换成swap2的形式 
七.指针引用
-  
可以代替二级指针
 
int home1(int ** meipo) {static int boy = 18;*meipo = &boy;return 0;
}int home2(int* & meipo) {static int boy = 18;meipo = &boy;return 0;
}
int main() {int* meipo = nullptr;home1(&meipo);cout << "meipo = " << *meipo << endl;//指针引用,可以代替二级指针,home2(meipo);cout << "meipo = " << *meipo << endl;return 0;
} 
八.内存复制函数
- 将一段内存里面的数据复制到另一段内存种
 
memcpy(&b,&a,sizeof(a));
//将a变量内存,复制给b内存一份,大小为a变量的大小 
