C++/C指针
1. 指针的*和后面的变量名结合,如:
int* a,b,c <==> int *a, int b, int c
2. 全局变量的指针初始值为NULL。
3.void* 不能用*指向其对应的变量值,也不能作++操作,无指针指向其字节数信息。
4. int test[2] =1;表示计算地址test+2*sizeof(int),返回地址指向的对象的引用。
5.数组名是个指针常量,即test等价于 int * const test(test == &test[0]),因此test不能被赋值。
6.数组的大小信息保存在数组第一个元素的前面,占用一个int字节大小,地址为test - sizeof(int)。但是数组不做动态检查,其一数组值判断开销太大,其二数组当成指针访问时,不知道大小。
7.数组和指针转化:
int a[1] <-> int * const a
int a[1][2] <-> int (*const a)[2]
int a[1][2][3] <-> int (* const a)[2][3]
a[1][2] <-> *(a[i] + j) <-> (*(a + i))[j] <-> *(*(a + i) + j)
8.字符指针:
C++/C默认把char *当成字符串处理,如:
char a = 'a';
char *p = &a;
cout<<p<<endl; -- 字符串输出错误
cout<<*p<<endl;--输出字符
9.函数指针:
1)函数指针的调用方式有两种,如
typedef (*f[3])(int );
f[0](1);
(*f[0])(1);
2)C++编译器会把类的所有成员函数经过Name-Mangling处理后转化为全局函数,并增加一个入参this作为第一个参数,供所属类的所有对象共享。
10.引用和指针区别:
1)引用创建的时候必须初始化,不能改变为另外一个对象的引用,而指针不需要初始化,且可以任意赋值。
2)引用不可以为NULL,但是指针可以为NULL。
3)引用的创建和销毁不会调用类的拷贝构造函数和析构函数。

浙公网安备 33010602011771号