c++学习笔记(九)

地址与指针

和c语言一样地址符用&表示

#include<iostream>
int main(){
	using namespace std;
	int donts = 6;
	double cups =4.5;
	
	cout<<"donts的值为"<<donts;
	cout<<"donts的地址为"<<&donts<<endl;
	cout<<"cups的值为"<<cups;
	cout<<"cups的地址为"<<&cups;
	return 0; 
	//donts的值为6donts的地址为0x6ffe0c
	//cups的值为4.5cups的地址为0x6ffe00
}

c++中的cout表示地址的时候经常使用十六进制表示法。在上面的例子中正常情况地址应该相差的是int的占用大小四个字节,但是在不同的系统中会有差异(我这个情况按群友大佬所说应该是由于debug的信息,在int前后各有两个四字节的标志)
下面用一个程序来理解指针

#include <iostream>
int main(){
	using namespace std;
	int updates = 6;
	int * p_updates;
	p_updates = &updates;
	
	cout<<"值:updates="<<updates;
	cout<<" , *p_updates="<<*p_updates<<endl;
	cout<<"地址:&updates="<<&updates;
	cout<<", p_updates = "<<p_updates<<endl;
	
	*p_updates = *p_updates + 1;
	cout<<"加一后的 updates = "<<updates<<endl;
	return 0;
}
/*
值:updates=6 , *p_updates=6
地址:&updates=0x6ffe04, p_updates = 0x6ffe04
加一后的 updates = 7
*/

可以看出 星号*是用来获取当前指针所存放的值的所以如果赋值也可以这样做赋值 int *p_update这样子,也称p_updates是int型指针,*两边的空格是可选的。
而指针中存放的也是地址所以说p_updates和&updates的值是一样的
由于*运算符只针对于指针变量,所以后面只能跟指针

注意,在声明的时候,每一个指针变量前面都要加星号
比如int*p1,p2这样做声明的是p1指针和int p2.

指针和数组一样都是基于类型的,星号前面是什么名称,他就是什么类型的指针

int higgens = 5;
int * pr = &higgens;

在上面的语句中,其实是将pr的值设置为了 &higgens,而不是*pr

指针的危险

根据我通俗的理解是这样的,一般写代码就老老实实的先给变量赋值再给指针赋值,如果只给指针赋值不赋值变量,比如说

long * fellow;
*fellow = 223333

那就说明代码只会给地址分配空间,而你输进去的这个值的变量没有初始化,那系统可能就随便给你塞到某个位置,万一塞到了代码区或者是什么乱七八糟的,那就危险了。

指针和数字不同

指针和整形不能混为一谈,如果一定要使用的化,加上括号进行强制类型转换把

int * pt;
pt = (int *)0xB8000000;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值