C PHP Go 指针探究
2013 年 12 月 3 日
前沿
在我学过的语言中有C语言,PHP,Go。今天我们来探讨下,在这些语言中指针的用法有什么不同呢?
定义
我们先来看个个语言中指针的形式吧
C语言中
int i = 5; int * p = &i; printf("%p", p); //结果是 0x7ffef3f4ff64
PHP中
$c = 5; $b = &$c; echo $b; //结果是 5
Go中
var i int = 5; var p *int = &i fmt.Printf("%p", p); //结果是 0xc0000b602021
从上面我们可以看出来,C和Go在指针的定义和调用上基本相同,区别在于Go没有指针运算。
那C和PHP就差距很大了,首先PHP就没有指针的概念,在PHP中主要说的都是引用。引用意味着用不同的名字访问同一个变量内容,打个比方:它就像一个人有两个不同的名字,它们并 不是实际的内存地址
比较
看一段PHP的代码
在来看看C语言中的代码
#includeint main() { int a = 1; int *b = &a; printf("%d\n", a); //1 free(b); printf("%d\n", a); // 报错invalid pointer return 0; } 从上面就可以看出来,差别还是很大的。 引用和指针并不是相同的概念,指针是针对 真实内存的操作 ,引用是针对指向这个内存的符号表的操作。从操作系统的快捷方式来说,快捷方式是可以删的,这就是PHP的引用。而C不仅删了快捷方式,还把原文件也给删除了。
虽然说PHP的底层说C写的,但是PHP的开发者没有暴露出C的原始指针的能力。
致谢
感谢你看完这篇文章,有什么不对的地方欢迎指出,谢谢:pray:
有疑问加站长微信联系(非本文作者)