4.指针
4.1可以利用指针变量保存地址
定义:数据类型 * 指针变量名
int * p
与数据建立联系:
p=&a;
使用:
解引用找到指针指向的内存(数据): *p;
在32位操作系统下,指针占用4个字节空间
4.2 空指针与野指针
1)空指针:指针变量指向内存中编号为0的空间
eg: int * p = NULL;
空指针指向的内存不可访问。
2)野指针:指针变量指向非法的内存空间
eg: in * p =(int *) 0x1100;
4.3 const修饰指针
4.3.1 常量指针
eg:
int a = 10;
int * p =&a; ---> const int * P = &a;
//*p=20; ×,值不可以修改
p = &b; // √,指针指向可以更改
特点:指针指向可以修改,指针指向的值不可以更改。
4.3.2 指针常量
eg:
int a = 10;
int * const p = &a;
*p=20; //√,指针指向的值可以修改
//p = &b; ×,指针的指向不可以更改。
4.3.3 const 即修饰指针,又修饰常量
eg:
int a=10;
const int * const p = &a;
*p=20; //×
p=&b; //×
特点:指针的指向和指针指向的值都可以修改。
值传递与地址传递
//值传递
void swap1(int a,int b)
{
//值传递不会改变实参的值
int temp = a;
a = b; //a = 10,b = 20 ,交换后
b = temp; //a = 10, b = 20;
}
//地址传递
void swap2(int *p1, int *p2)
{
//地址传递会改变实参的值
int temp = *p1;
*p1 = *p2; //a = 10, b = 20, 交换后
*p2 = temp; //a = 20, b = 10;
}