【问题标题】:Pointer help: dereferencing a pointer to a struct accessing data within it指针帮助:取消引用指向访问其中数据的结构的指针
【发布时间】: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->charArrayptrToStruct->charArray[0]
  • 我很抱歉,你是对的。它是 myStruct *ptrToStruct
  • myStruct ptrToStruct = &myStructure; 是错误的,因为该变量是一个结构,而不是指向结构的指针,但是您尝试使用指向结构而不是结构的指针来初始化它。
  • 如果是myStruct *ptrToStruct,那么*(ptrToStruct.charArray) 无效。

标签: c++ c pointers struct


【解决方案1】:

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';

【讨论】:

    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 2011-02-04
    • 2013-09-05
    • 1970-01-01
    • 2017-01-04
    • 2014-05-09
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多