我无法解决某段代码如何工作的问题。出于某种原因,它只是没有点击。这行代码通常用于在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解释指针没有.
运算符。
答案 0 :(得分:3)
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';