1. 判断下列哪些定义是错误的:
int a = 7; const int b = 100; int &c = b; //错误:不能用常量类型的变量定义非常量类型的引用; const int &d = a; a++; d++;// 不能修改常量的引用,修改变量的值
2.引用和指针的区别
| 指针 | 引用 | |
| 声明 | 赋不赋初值都可以 | 必须赋初值 |
| 可修改性 | 随时修改 | 不能被修改 |
| NULL | 可以指向一段空的地址 | 不能为空 |
| 检查合法性 | 要经常检查 | 不需要检查 |
语言层面引用和对象一样,但在二进制层面,引用 一般都是通过指针来实现的,只不过编译器已经帮助我们实现;
3.为啥传引用比传指针更安全
引用一旦被初始化,就不能被更改,所以很安全;
指针可以随时被改变,并且可以不被初始化,或为NULL,即使是const指针仍存在空指针并且存在野指针;
4.复杂的指针声明
1.定义一个指向整型数的指针 int *a; 2.指向指针的指针,它指向的指针是指向一个整形数 int **a; 3.有10个整型数的数组 int a[10]; 4.有10个指针的数组,指向整型数的 int *a[10]; 5.有10个整型数数组的指针 int (*a)[10]; 6.指向函数的指针,该函数有一个整型数并返回一个整型数 int (*a)(int k); 7.有10个指针的数组,指针指向一个函数,函数有一个整型参数,并返回一个整型数 int (*a[10])(int a);
5.用指针赋值
#includeint main() { char a[]="hello world"; char * ptr = a; printf("%cn",*(ptr+4));//o printf("%cn",ptr[4]);//o printf("%cn",a[4]);//o printf("%cn",*(a+4));//o *(ptr+4) +=1;//p printf("%sn",a);//hellp world }



