5、指针
5.1 指针的基本概念
指针的作用:可以通过指针直接访问内存,指针内保存着地址
- 内存编号从0开始,一般用十六进制数表示
- 可以利用指针变量保存内存地址
5.2 指针的定义和使用
5.2.1 指针的定义
int a=10;
int *p;
p=&a;
5.2.2 指针的使用
可以通过某种方式来找到指针指向的内存,并对这块内存进行操作。其中,解引用和直接引用是两种常见的方式,当数据为基本数据类型的时候,使用解引用;当数据是数组之类的数据时直接引用,如下代码所示。
#include<iostream>
using namespace std;int main() {int arr[] = {1,2,3};int * p= arr;cout << *p << endl;int a = 9;// int * p;p = &a;cout << *p << endl;system("pause");
/*输出:19
*/
}
5.2.3 空指针和野指针
- 空指针:
- 空指针用于给指针变量进行初始化(int * p=Null)
- 空指针是不可以尽心访问的
- 野指针
- 直接给指针赋值,int * p=(int *) 0x1111; 由于内存0x1111并没有真的被申请,访问会报错;
空指针和野指针都不应该在程序中出现,要尽量避免
5.2.4 const 修饰指针
- const int * p=&a; 常量指针 指针的指向可以修改,但是指针指向的值不可以修改
const int * p=&a;*p=100;//会报错,指向的值不可以修改p=&b;// 正常运行,指针的指向可以修改
- int * const p=&a; 指针常量 指针指向不可以改,但是指针指向的值都可以修改
int * const p=&a;*p=100;// 可以修改p=&b;// 报错
- const int * const p=&a; 指针指向和指针的值都不可以修改
5.2.5 指针和数组
指针的作用是更快速的访问数据,例如数组
- 指针加一是向后移动单位个字节(移动字节的数目和指针的类型所占的字节相同,例如 int型的指针p++ 移动四个字节 long long 型指针p++ 移动八个字节)
#include<iostream>
using namespace std;int main() {long long arr[] = {1,2,3};long long * p= arr;cout << *p << endl;p++; // 指针加一是向后移动单位个字节(移动字节的数目和指针的类型所占的字节相同)cout << *p << endl;system("pause");}
5.2.5 指针和函数
在函数内直接修改变量的值,可以使用指针
#include<iostream>
// #include"myfunc.h"
using namespace std;
int swap(int * p1, int *p2);int main() {int num1=1;int num2 = 2;int* p1 = &num1;int* p2 = &num1;swap(*p1, *p2);cout << num1 << endl;cout << num2 << endl;swap(&num1, &num2);cout << num1 << endl;cout << num2 << endl;system("pause");}int swap(int * p1, int * p2) {int tmp=*p1;*p1 = *p2;*p2 = tmp;return 0;
}