首页 > 代码库 > C++学习笔记(五):指针

C++学习笔记(五):指针

声明指针:

1 //指针声明 * 号左右的空格是可选的,下面的定义都是正确的2 int *pointer1;3 int* pointer2;4 int*pointer3;5 int * pointer4;6 //注意: pointer5 是指针而 pointer6 不是7 int *pointer5, pointer6;8 //pointer7 和 pointer8 都是指针9 int *pointer7, *pointer8;

指针的类型和指针所指向的类型:

1 //指针的类型是int*,表示为int对象的指针2 //指针所指向的类型是int,表示该指针指向int对象3 int *pointer1;

指针的值:

指针表示指向对象位于内存中的地址,对于32位的系统来说就是一个无符号的32位数字(最多表示4GB内存),64位系统就是一个无符号的64位数字;

取地址和取值:

取一个对象的地址使用&符号,取一个指针指向的对象的值使用*符号;

1 int num = 100;2 int *p = #3 p = 101;//错误, 这是直接改变指针的指向,指向内存地址1014 *p = 101;//正确, 修改了num的值

空指针:

表示这个指针没有指向一块有意义的内存,对空指针应用delete是安全的。

1 //没有赋值的指针2 int *p;3 //赋值为NULL或0的指针4 int *p = NULL;5 int *p = 0;

指针的算术运算:

指针的加减法会以sizeof(指针指向的类型)来处理,比如:

1 int num = 100;2 int *p = #3 p++;//指针的地址指向+4之后的位置4 ptr += 5;//指针的地址指向+20之后的位置

指向指针的指针:

指针同样可以指向另一个指针,

1 int **ptr;//指向一个int类型指针的指针

指针和数组:

数组的数组名其实可以看作一个指针,

1 int array[10]={0,1,2,3,4,5,6,7,8,9},value;2 value=http://www.mamicode.com/array[0];//也可写成:value=http://www.mamicode.com/*array;3 value=http://www.mamicode.com/array[3];//也可写成:value=http://www.mamicode.com/*(array+3);4 value=http://www.mamicode.com/array[4];//也可写成:value=http://www.mamicode.com/*(array+4);

在表达式sizeof(array)中,数组名array代表数组本身,故这时sizeof函数测出的是整个数组的大小。

在表达式*array中,array扮演的是指针,因此这个表达式的结果就是数组第0号单元的值。sizeof(*array)测出的是数组单元的大小。

在很多情况下,可以相同的方式使用指针名和数组名。对于它们,可以使用数组方括号表示法,也可以使用解除引用运算符(*)。在多数表达式中,它们都表示地址。区别之一是,可以修改指针的值,而数
组名是常量。

成员调用:

结构变量.成员名

(*结构指针变量).成员名

结构指针变量->成员名

C++学习笔记(五):指针