C++ 指针帮助:取消对访问结构中数据的结构的指针的引用
我在思考某行代码是如何工作时遇到了一些问题。出于某种原因,它只是没有点击。这行代码通常用于unix域套接字中的抽象文件句柄 背景:C++ 指针帮助:取消对访问结构中数据的结构的指针的引用,c++,c,pointers,struct,C++,C,Pointers,Struct,我在思考某行代码是如何工作时遇到了一些问题。出于某种原因,它只是没有点击。这行代码通常用于unix域套接字中的抽象文件句柄 背景: typedef struct myStruct { char charArray[10]; } myStruct; myStruct myStructure; myStruct *ptrToStruct = &myStructure; /* This should change myStructure.charAarray[0] to equa
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所解释的,指针没有
操作符 ptrToStruct
不是结构,所以
ptrToStruct.charArray
应该是
(*ptrToStruct).charArray
或
然后,是的,您可以使用
*( ptrToStruct->charArray ) = 'a';
或
这和
char charArray[10];
*charArray = 'a';
及
myStruct ptrToStruct
应该是myStruct*ptrToStruct
*(ptrToStruct.charArray)
应该是*ptrToStruct->charArray
或者ptrToStruct->charArray[0]
对不起,你是对的。它是myStruct*ptrToStructmyStruct ptrToStruct=&myStructure
是错误的,因为变量是一个结构,而不是指向结构的指针,但您试图用指向结构而不是结构的指针对其进行初始化。如果它是myStruct*ptrToStruct
,则*(ptrToStruct.charArray)
无效。
( ptrToStruct->charArray )[0] = 'a';
char charArray[10];
*charArray = 'a';
char charArray[10];
charArray[0] = 'a';