【发布时间】:2018-04-27 00:09:12
【问题描述】:
我很难理解某行代码的工作原理。由于某种原因,它只是没有点击。这行代码通常与 unix 域套接字中的抽象文件句柄一起使用。
上下文:
typedef struct myStruct {
char charArray[10];
} myStruct;
myStruct myStructure;
myStruct *ptrToStruct = &myStructure;
/* This should change myStructure.charAarray[0] to equal a */
*(ptrToStruct.charArray) = 'a';
我了解数组本质上是一个指针,它指向数组中的第一个索引,但该指针没有数据 (charArray)。
这对我来说很难理解的原因是因为ptrToStruct 试图访问指针的数据成员charArray,但指针没有数据成员charArray,然后它正在取消引用它。
这有点像(*ptrToStruct).(*charArray) = 'a'?但是取消引用运算符被排除在外了吗?我为完全不清楚而道歉。
更新:问题已得到解答。我误读了代码,代码实际上是*(myStructure.charArray),这就是它改变数组第一个索引的方式。我也应该知道这一点,因为正如 Sid 解释的那样,指针没有 . 运算符。
【问题讨论】:
-
myStruct ptrToStruct应该是myStruct *ptrToStruct -
*(ptrToStruct.charArray)应该是*ptrToStruct->charArray或ptrToStruct->charArray[0] -
我很抱歉,你是对的。它是 myStruct *ptrToStruct
-
myStruct ptrToStruct = &myStructure;是错误的,因为该变量是一个结构,而不是指向结构的指针,但是您尝试使用指向结构而不是结构的指针来初始化它。 -
如果是
myStruct *ptrToStruct,那么*(ptrToStruct.charArray)无效。