关于php:C-PHP-Go-指针探究

39次阅读

共计 736 个字符,预计需要花费 2 分钟才能阅读完成。

前沿

在我学过的语言中有 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 的原始指针的能力。

致谢

感激你看完这篇文章,有什么不对的中央欢送指出,谢谢????

正文完
 0