关于C的指针,Java/Python的引用,形参与实参个人理解

最近稍微学习了下Go语言,Go语言真是大融合即视感,明明是静态语言,却结合了动态语言的诸多优点,写起来感觉就像个动态语言,却有着不输给静态语言的执行速度。略屌,可是现在应用还是比较窄,编程语言排行榜上前五十基本看不到他,囧。

然后Go里面使用了指针和引用这两种概念,因为之前学过C++跟Java,所以对这两者都挺有感觉的,当时指针真是整的我痛苦不堪,后来再看Java的时候,学习了引用这个概念,再回去看指针,我去,原来指针也就那么回事。。。搞懂了内存就完全搞懂了,可是看的书硬是不说这些,让人无语。所以决心自己写个入门级的指针详解,借鉴引用的概念,说说自己的理解。

先说下静态语言跟动态语言,静态语言必须先声明变量才能使用,典型代表C跟C++,其实就是int num; num = 100,动态语言代表有python,不用声明直接使用如num = 100.静态跟动态,我们常说的就是编译跟运行。把编译时就能确定的数据类型叫做静态语言,而在运行时才确定变量数据类型的叫做动态语言。这里只是先讲个题外话=_=。

 

好了,然后正式开始介绍。

搞懂内存就搞懂了指针跟引用。所以我们从内存概念入手研究指针。

 


 

一、指针初识

在C当中,是没有引用这个概念的,当使用a = b这个操作时,不管a是什么数据类型,他都默认发生了拷贝,但是我们有时,或者大多数时候,其实压根就不希望他拷贝,我们想操作原来的数据,不然一个2G的数组来排序,每次都复制一下,内存可是扛不住的,所以在C当中就加入了指针这个概念,指针的运行逻辑是这样的:

举个例子,这个例子的代码是C语言了。

int a = 10;

int b;

b = a;

b = 100;

 

int p = 10;

int *q;

q = &p;

*q = 100;

则结果a还是等于10,而p则变成100了。第一个例子就是我们刚才说的,在C当中,赋值即是拷贝,这两个已经不是同一个值了。而第二句我们都知道,因为他们指向了同一个内存地址,所以改变了其中一个,另一个也就跟着改变了。

从内存的角度去理解这些就是。内存是一个存储单元,它上面有很多很多格子,每个格子都有一个编号,我们把它叫做地址。如下:

0000

1000

0001

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值