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)引用的创建和销毁不会调用类的拷贝构造函数和析构函数。

 

posted @ 2017-09-04 23:43  一种微笑  Views(116)  Comments(0)    收藏  举报