指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。
//数据类型* 指针变量
int * p;
int a = 10;
//定义指针
int* p;
//指针记录变量a的地址
p = &a;
cout << "指针a的地址:" << &a << endl; //0053F754
cout << "指针p的地址:" << p << endl; //0053F754
//使用指针 通过解引用的方式找到指针指向的内存
//指针前加 * 代表解引用,找到指针指向的内存中的数据
*p = 1000;
cout << "a=" << a << endl; //1000
cout << "*p=" << *p << endl; //1000
空指针是用于给指针变量进行初始化,空指针是不可以进行访问的。
int * p = NULL;
没有权力操作的一块内存,在程序中,尽量避免出现野指针。
常量指针
const修饰指针,指针的指向可以修改,但是指针指向的值不可以修改。
const int * p = &a;
指针常量
const修饰常量,指针的指向不可以修改,指针指向的值可以修改。
int * const p = &a;
又修饰常量
const既修饰指针又修饰常量,指针的指向和指针指向的值都不可以修改。
const int * const p = &a;
int var[3] = { 10, 100, 200 };
// 指针中的数组地址
int* ptr = var;
cout << "利用指针访问第一个元素:" << *ptr << endl;
//指针后移4个字节
ptr++;
cout << "利用指针访问第二个元素:" << *ptr << endl;
void swap01(int* p1, int* p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
//地址传递
int a = 10, b = 20;
swap01(&a,&b);
//如果不想修改实参就用值传递,如果想修改实参,就用地址传递