指针
特点:
1.指针数据类型所占用的空间: 四个字节(32位操作系统),八个字节(64位操作系统)
【sizeof(int * ) or sizeof(p)】
2.空指针:指针变量空间指向内存中编号为0的空间,通常用于指针的初始化
【注意空指针是不可以访问的】
// 内存编号 0 ~ 255 为系统占用的内存,不允许用户访问 int * p = NULL;
3.野指针:指针变量指向非法的内存空间
int * p = ( int * )0x1100;
4.const修饰指针:
1.const修饰指针--常量指针 // 指针指向可以更改,但是指针指向的值不可以更改 // 也就是说可以指向一个别的值不相等的指针 const int * p1 = &a; p1 = &b; 2.const修饰常量--指针常量 // 指针指向不可以改,但是指针指向的值可以改 int * const p2 = &a; *p2 = 100; 3.const即修饰指针,又修饰常量 // 指针指向和指针指向的值都不可以改 const int * const p;
5.指针与数组:
作用:利用指针访问数组元素
// 利用指针访问数组第一个元素 int * p = arr; // 让指针向后获取下一元素地址 p++; 注:int * arr == &arr[0]
6.指针与函数:
作用:利用指针作参数,可以修改实参的值
// 值传递 void swap1(int a, int b){ a = a ^ b; b = a ^ b; a = a ^ b; } // 地址传递 void swap2(int * p1, int * p2){ *p1 = *p1 ^ *p2; *p2 = *p1 ^ *p2; *p1 = *p1 ^ *p2; }
示例:
1.定义指针 int a = 10; // 指针定义语法: 数据类型*指针变量名 int * p; // 让指针记录变量a的地址 p = &a; cout<<"a的地址为:"<<&a<<endl; cout<<"指针p为:"<<p<<endl; 2.使用指针 // 可以通过解引用的方式来找到指针指向的内存 // 指针前加 * 代表解引用,找到指针指向的内存中的数据 *p = 100; cout<<"*p = "<<*p<<endl;