1、指针的定义和使用
指针的作用:可以通过指针间接访问内存
- 内存编号是从0开始记录的,一般都用16进制的数字表示
- 可以利用指针变量保存地址
*指针变量定义语法:数据类型 变量名;
int a=10;
int *p;//定义一个指针变量
p=&a;//给指针变量赋值
*p;//解引用,找到指针所指向的内存
2、指针所占的内存空间
说明:在32操作系统下,占4个字节;在64位操作系统,占8个字节
cout << "int *所占的字节:" << sizeof(int*) << endl;
cout << "float *所占的字节:" << sizeof(float*) << endl;
cout << "double *所占的字节:" << sizeof(double*) << endl;
cout << "char *所占的字节:" << sizeof(char*) << endl;
- 32操作系统
- 64位操作系统
3、空指针
- 空指针:指针变量指向内存编号位0的空间
- 用途:初始化指针变量
- 空指针指向的内存是不可以访问的
int* p = NULL;
*p = 100;
cout << p << endl;//0000000000000000
cout << &p << endl;//00000023C393F948
cout << *p << endl;
4、野指针
野指针:指针指向非法的内存空间
int* p =(int*) 0x0011;//自己指定一段内存
*p = 100;//修改野指针会报错
cout << *p << endl;//访问野指针会报错
5、const修饰的指针
- const修饰的指针:常量指针
特点: 指针的指向可以更改,指针的值不可以更改
int a = 10;
int b = 20;
const int* p = &a;
p = &b;
//*p = 20;//报错
- const修饰的变量
特点: 指针的指向不可以更改,指针的值可以更改
int* const p = &a;
*p = 20;
//p = &b;//报错
- const即修饰指针又修饰变量
特点: 指针的指向不可以更改,指针的值不可以更改
const int* const p = &a;
p = &b;//报错
*p = 100;//报错
6、指针和数组
作用:利用指针访问数组元素
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int* p = arr;
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++)
{
cout << *p << endl;
p++;
}
7、指针和函数
作用:利用指针作为函数参数,修改实参
void swap(int* a, int* b)//函数的设计
{
int temp = *a;
*a = *b;
*b=temp;
}
int a = 10;
int b = 20;
swap(&a, &b);//函数的调用
cout << "实参中的a=" << a << endl;
cout << "实参中的b=" << b << endl;