【菜鸟C++学习笔记】16.地址和指针

本文介绍了C++中的地址和指针概念。地址是内存中的编号,可以通过"&"获取;指针用于存储内存地址,核心作用是直接操作内存。指针定义时需初始化,避免成为迷途指针。指针有类型限制,只能存储相同类型变量的地址,并可通过"*"访问和修改变量值。此外,还讨论了指针的地址、指针保存的地址及地址值的区别,并提及指针的运算操作。

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:0012FF44

3、指针的一般用法:

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、指针的运算:

指针也可以进行相加、相减、自加、自减、比较的操作,只不过操作的数据都是指针保存的地址罢了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值