20-06-04-c/c++取地址(&)和引用(&)----指针(*)和解引用(*)

优秀作者借鉴:初级篇——指针()、取地址(&)、解引用()与引用(&)的区别

无论是c还是c++,指针都是*

  1. 初步了解——指针与取地址

这里是c文件,要以xxx.c命名

#include<stdio.h>
 
int main(void)
{
	int num = 7;
	int *p = &num;//初始化指针,也可以写作int* p = &num;
	printf("%d 的地址是 %p\n", num, p);
	return 0;
}

int *p = &num 中,int是指类型(这里是整型);*是指p是指针,&num是指num的地址,这里&的作用就是取num的地址。=是指,p等于num的地址或者说p指向num的地址。

  • 我们把上述代码打印出来看看
7 的地址是 0061FF18

  1. 如何使用指针?——解引用与指针赋值
#include<stdio.h>
 
int main(void)
{
	int num = 7;
	int *p = &num; //初始化
	printf("数值%d所在的地址是 %p\n", num, p);
	printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, *p);
	*p = 100;
	printf("指针p所指向的地址为 %p , 该地址上所保存的值为%d\n", p, num);
	printf("------num----%d\n",num);
	return 0;
}

第一个printf,num是7,p是地址
第二个printf,p是指指针p所指地址里面的值,因为p指向的地址是num的地址,而num地址里的值是7,所以p等于7
第三个printf,这里,*p=100的意思是,p指向的地址的值是100.没有疑问吗?刚刚p指向的地址的值不还是7吗?怎么现在是100了呢?

  • 这是因为,int *p = &num;只是使得p的地址是num所在的地址,地址里面的内容是可以修改的。当我们是*p = 100;的时候,就修改了p地址的内容,所以现在该地址上所保存的值为100
    第三个printf,为了便于大家理解,我也打印了现在的num,因为num的内容已经被修改了,所以现在的num已经不是以前的num了
数值7所在的地址是 0061FF18
指针p所指向的地址为 0061FF18 , 该地址上所保存的值为7
指针p所指向的地址为 0061FF18 , 该地址上所保存的值为100
------num----100
  • 给p换个地址
#include<stdio.h>
 
int main(void)
{
	int num = 7, another = -5;
	int *p = &num;
	p = &another;
	printf("-----------是-%d\n", *p);//此时p指向了another,所以输出了another的值,即-5
	return 0;
}

现在p = &another;,也就是把p的地址改为了another的地址

------------5

  1. 引用(引用概念在C++中才有,C中并没有)
    这里的文件xxx.cpp,现在是c++语言了
#include<cstdio>
 
int main()
{
	int val = 7, val2 = 999;
	int &refval = val, &refval2 = val2; ///引用必须要初始化,使其绑定到一个变量上
	///修改引用的值将改变其所绑定的变量的值
	refval = -12;
	printf("%d %d\n", val, refval);//-12,refval的值和val一样
	
	///将引用b赋值给引用a将改变引用a所绑定的变量的值,
	///引用一但初始化(绑定),将始终绑定到同一个特定对象上,无法绑定到另一个对象上
	refval = refval2;
	printf("%d %d\n", val, refval);//999
	return 0;
}
-12 -12
999 999

原文解释的很清楚了,我就不班门弄斧了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值