1、地址:内存中的编号
在C++中,系统会给每一个变量分配一个内存空间,这块空间一般有个地址,就是编号,通过这个编号,系统可以访问这个变量并进行操作,计算机通过"&"命令获取内存地址,如下面程序:
#include<iostream>
using namespace std;
int main()
{
int i=1;
cout<<"i这个变量的地址是:"<<&i<<endl;
return 0;
}输出结果:i这个变量的地址是:0012FF44
注意:不同的编译器输出的结果是不一样的。
2、指针:用于直接对内存进行操作
核心作用:保存内存的地址
定义方法:在指针变量前加星号"*",例如:
#include<iostream>
using namespace std;
int main()
{
int i=1;
cout<<"i这个变量的地址是:"<<&i<<endl;
int *p;//注意这个指针变量的类型是int
p=&i;//将i的地址取出赋给变量p
cout<<"p:"<<p<<endl;
return 0;
}输出结果:i这个变量的地址是:0012FF44 p:0012FF443、指针的一般用法:
1)空指针:
指针在定以后一般需要用它保存一个内存地址,如果不这么做,就会成为迷途指针,可能指向任何地址,对该地址的数值进行修改或删除,造成意想不到的后果,因此要养成一个习惯:定义指针后直接初始化,即:
int *p=0;这个指针称为空指针,即把p保存的内存地址清零。
2)指针的类型:
不同类型的变量,编译器分配的内存大小有所区别,因此指针也分类型,只能存储与它类型相同的变量的地址。
3)通过指针访问并修改变量的值:
*p中,p存储内存地址,加上星号"*"时,即"*p"就表示变量中保存的地址的值。同时也可做出相应的修改:
*p=2;作用就是使得p所存地址的那个变量的值修改为2
4)地址指针&指针保存的地址&地址值
指针地址:指针自身的地址
其他两个前面有过说明,通过下面程序说下三者的区别:
#include<iostream>
using namespace std;
int main()
{
int i;
int *p=0;
cout<<"i的地址是:"<<&i<<endl;
cout<<"p的值为:"<<p<<endl;
cout<<"p的地址是:"<<&p<<endl;
i=3;
p=&i;
cout<<"i的地址是:"<<&i<<endl;
cout<<"p的值为:"<<p<<endl;
cout<<"p的地址是:"<<&p<<endl;
return 0;
}输出结果:

分析:第一行输出变量i的地址,它在定以后系统就自动为其分配了内存空间,所以赋值后第四行输出的这个地址仍然没变;
第二行输出p的地址,就是指这个指针*p所保存的地址,在后面为p赋值为&i后,这个值就变成了i的地址;
第三行输出的是指针地址,即"*p"这个指针自己的内存地址,因为内存也要给指针变量分配内存空间,故第六行地址仍然没变。
4、指针的运算:
指针也可以进行相加、相减、自加、自减、比较的操作,只不过操作的数据都是指针保存的地址罢了。
本文介绍了C++中的地址和指针概念。地址是内存中的编号,可以通过"&"获取;指针用于存储内存地址,核心作用是直接操作内存。指针定义时需初始化,避免成为迷途指针。指针有类型限制,只能存储相同类型变量的地址,并可通过"*"访问和修改变量值。此外,还讨论了指针的地址、指针保存的地址及地址值的区别,并提及指针的运算操作。

578

被折叠的 条评论
为什么被折叠?



