3

C PHP Go 指针探究

 3 years ago
source link: https://studygolang.com/articles/32545
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

iEFr2ar.png!mobile

前沿

在我学过的语言中有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的代码

<?php
    $a = 1;
    $b = &$a;
    echo $a; //1
    unset($b); // unset $b
    echo $a; //1 it's OK

在来看看C语言中的代码

#include<stdio.h>
int 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:

有疑问加站长微信联系(非本文作者)

eUjI7rn.png!mobile

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK