首页 > 解决方案 > 指针帮助:取消引用指向访问其中数据的结构的指针

问题描述

我在理解某行代码的工作方式时遇到了一些麻烦。由于某种原因,它只是没有点击。这行代码通常与 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 解释的那样,指针没有.运算符。

标签: c++cpointersstruct

解决方案


ptrToStruct不是结构,所以

ptrToStruct.charArray

应该

(*ptrToStruct).charArray

或者

ptrToStruct->charArray

然后,是的,您可以使用

*( ptrToStruct->charArray ) = 'a';

或者

( ptrToStruct->charArray )[0] = 'a';

这和没有区别

char charArray[10];
*charArray = 'a';

char charArray[10];
charArray[0] = 'a';

推荐阅读