内存编号是从0开始记录的,一般用十六进制数字表示
可以利用指针变量保存地址(指针就是地址)
指针变量定义语法:
数据类型 * 变量名;
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
//1、定义指针
int a = 10;
int* p; //创建指针变量
p = &a; //让指针记录变量a的地址
cout << "a的地址为:" << &a << endl;
cout << "指针p为:" << p << endl;
//2、使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*代表解引用,找到指针指向的内存中的数据
*p = 1000; //指针可以用来修改数据
cout << "a = " << a << endl;
cout << "*p = " << *p << endl;
system("pause");
return 0;
}
运行结果:
a的地址为:00CFFC9C
指针p为:00CFFC9C
a = 1000
*p = 1000
指针也是一种数据类型
int *p;
#include<iostream>
using namespace std;
int main()
{
//指针所占内存空间
int a = 10;
//int* p; //创建指针变量
//p = &a; //让指针记录变量a的地址
//等价于
int* p = &a;
//cout << "sizeof (int *):" << sizeof(p) << endl;
//等价于
cout << "sizeof (int *):" << sizeof(int *) << endl;
cout << "sizeof (float *):" << sizeof(float *) << endl;
cout << "sizeof (double *):" << sizeof(double *) << endl;
cout << "sizeof (char *):" << sizeof(char *) << endl;
system("pause");
return 0;
}
运行结果:
sizeof (int *):4
sizeof (float *):4
sizeof (double *):4
sizeof (char *):4
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的
#include<iostream>
using namespace std;
int main()
{
//空指针
//1、空指针用于给指针变量进行初始化
int* p = NULL; //NULL在内存中代表0
//2、空指针是不可以进行访问的
//0~255之间的内存编号是被系统占用的,因此不可以被访问
*p = 100; //报错
system("pause");
return 0;
}
野指针:指针变量指向非法的内存空间
#include<iostream>
using namespace std;
int main()
{
//野指针
int* p = (int *)0x1100; //直接指向16进制没有申请的内存空间
cout << *p << endl; //报错
system("pause");
return 0;
}
三种情况:
语法:
const int *p = &a;
特点:指针的指向可以修改,但指针指向的值不可修改
*p = 20; //错误,指针指向的值不可以修改
p = &b; //正确,指针指向可以修改
#include<iostream>
using namespace std;
int main()
{
//1、const修饰指针,常量指针
int a = 10;
int b = 20;
const int* p = &a;
//指针指向的值不可以改,指针的指向可以改
//*p = 20; //错误
p = &b; //正确
cout << *p << endl; //报错
system("pause");
return 0;
}
语法:
int * const p = &a;
特点:指针指向不可以改,指针指向的值可以改
* p = 20; //正确
p = &b; //错误
const int * const p = &a;
?特点:指针的指向和指针指向的值都不可修改
* p = 20; //错误
p = &b; //错误
#include<iostream>
using namespace std;
int main()
{
//1、const修饰指针,常量指针
int a = 10;
int b = 20;
const int* p = &a;
//指针指向的值不可以改,指针的指向可以改
//*p = 20; //错误
p = &b; //正确
cout << *p << endl;
//2、const修饰常量,指针常量
//指针指向的值可以改,指针的指向不可以改
int* const p2 = &a;
*p2 = 100; //正确
//p2 = &b; //错误,指针的指向不可以改
cout << *p2 << endl;
//3、const修饰指针和常量
//指针指向的值和指针的指向都不可以修改
//*p2 = 100; //错误
//p2 = &b; //错误
system("pause");
return 0;
}
运行结果:
20
100