这条线在PHP的线程安全构建中做了什么?

时间:2011-09-01 03:14:32

标签: 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)

1 个答案:

答案 0 :(得分:1)

*((void ***)tsrm_ls)

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

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

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

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