php - 这行代码在 PHP 的线程安全构建中做了什么?

标签 php c

我正在阅读《扩展和嵌入 PHP》一书,并在 C 语言中发现了这一行(以及相关结构):

typedef struct {
    int sampleint;
    char *samplestring;
} php_sample_globals;
int sample_globals_id;

(((php_sample_globals*)(*((void ***)tsrm_ls))[sample_globals_id - 1])->sampleint = 5

作者接着写道:
“如果您在解析该语句时遇到困难,请不要担心;它已很好地集成到 PHPAPI 中,以至于一些开发人员从不费心去了解它是如何工作的。”

我开始迷失*((void ***)tsrm_ls)

最佳答案

*((void ***)tsrm_ls)

将变量tsrm_ls转换为指向指针的指针,然后获取指向的内容(因此最终得到一个指向指针的指针)

查看其余代码并假设它是正确的:

tsrm_ls 是一个指向 php_sample_globals 结构的指针数组的指针。

此代码查看该数组中的 sample_globals_id-1 索引,找到它指向的结构,然后将该结构的 sampleint 元素设置为 5

关于php - 这行代码在 PHP 的线程安全构建中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265783/

相关文章:

php - MySQL 查询多个连接但结果不正确

php - 从 Laravel 5 中的 Controller 运行 Composer dump-autoload

c - 在 C 中使用递归函数时避免使用全局变量

c - 在 Raspberry Pi 上使用 Alsa 出现段错误

我可以重用请求对象吗?

c - 调试和发布之间的奇怪链接差异导致未解析的 _except_handler3,或者为什么,哦,为什么我不知道 libcmtd?

php - 在帖子中使用 jQueryUI Sortable

php - 从 MySQL 列创建 PHP 数组,使用 auto_increment 列作为索引

c - 文件中的偏移量在 C 中存储在哪里?

Javascript - 函数无法从 JQuery 获取外部输入值