声明指针:
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;//错误, 这是直接改变指针的指向,指向内存地址101 4 *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=array[0];//也可写成:value=*array; 3 value=array[3];//也可写成:value=*(array+3); 4 value=array[4];//也可写成:value=*(array+4);
在表达式sizeof(array)中,数组名array代表数组本身,故这时sizeof函数测出的是整个数组的大小。
在表达式*array中,array扮演的是指针,因此这个表达式的结果就是数组第0号单元的值。sizeof(*array)测出的是数组单元的大小。
在很多情况下,可以相同的方式使用指针名和数组名。对于它们,可以使用数组方括号表示法,也可以使用解除引用运算符(*)。在多数表达式中,它们都表示地址。区别之一是,可以修改指针的值,而数
组名是常量。
成员调用:
结构变量.成员名
(*结构指针变量).成员名
结构指针变量->成员名
时间: 2024-10-11 21:42:29