代码来源:黑马程序员C++课程
指针的本质就是变量的内存地址
指针的作用:可以通过指针间接访问内存
指针变量的定义和使用:
指针变量定义语法:数据类型 *变量名;
代码1;
#include <iostream>
using namespace std;
int main() {
//1、定义指针
int a = 10;
int* p;
p = &a;
cout << "a的地址为:" << &a << endl;
cout << "指针p为:" << p << endl;
//可以通过解引用的方式来找到指针指向的内存
//指针前加 *代表解引用,找到指针指向的内存中的数据
*p = 1000;
cout << "a = " << a << endl;
cout << "*p = " << *p << endl;
//2、使用指针 system("pause");
return 0;
}
指针变量和普通变量的区别
普通变量存放的是数据,指针变量存放的是地址
指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用
总结1: 我们可以通过 & 符号 获取变量的地址
总结2:利用指针可以记录地址
总结3:对指针变量解引用,可以操作指针指向的内存
指针所占的内存大小
下面代码给出了各种类型指针所占的内存大小
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* p;
p = &a; //指针指向数据a的地址
//在32位操作系统下,指针占用4个字节空间;64位下占8个字节;
cout << *p << endl; //* 解引用
cout << sizeof(p) << endl;
cout << sizeof(char*) << endl;
cout << sizeof(float*) << endl;
cout << sizeof(double*) << endl;
system("pause");
return 0;
}
空指针
空指针一般用于定义一个指针,但是暂时不知道赋值的时候。
空指针:指针变量指向内存中编号位0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的;
#include<iostream>
using namespace std;
int main() {
int* p = NULL;
cout << p << endl;
system("pause");
return 0;
}
野指针
野指针指向的内存地址是非法的内存空间
#include<iostream>
using namespace std;
int main() {
//指针变量p指向内存地址编号为0x1100的空间
int* p = (int*)0x1100;
//访问野指针报错
cout << *p << endl;
system("pause");
return 0;
}
运行结果:报错
Const修饰指针
有些时候一些变量和指针不希望被别人修改的时候,可以使用const修饰。
const有三种修饰形式:
1、const修饰指针
2、const修饰变量
3、const既修饰指针又修饰变量
#include<iostream>
using namespace std;
int main() {
int a = 10;
int b = 10;
//const 修饰的是指针,指针的指向可以改,指针指向的值不可以改
const int* p1 = &a;
p1 = &b; //正确
//*p =100;报错
//const修饰的是常量,指针的指向不可以改,指针指向的值可以改
int* const p2 = &a;
//p2 = &b; //错误
*p2 = 100; //正确
//const既修饰指针又修饰常量
const int* const p3 = &a;
//p3 = &b; //错误
//*p3 = 100; //错误
system("pause");
return 0;
}