c - C 中返回值类型不匹配

标签 c arrays pointers struct typedef

我有这两个结构:

#define M 100
#define N 100

typedef struct xml_Element {
pData_Element           data;
pAttr_Element           attr_arr[M];
struct xml_Element      *parent;
struct xml_Element      *children[N];
int                     depth;
int                     num_of_children;
int                     num_of_attr;
} Xml_Element,*pXml_Element;

  typedef struct attrElem {
      char *attrName;
      char *attrValue;
   }Attr_Element,*pAttr_Element;

我写了这个函数:

pAttr_Element getXmlAttrArray(pXml_Element node) {
    return node->attr_arr;
}

我有几个问题:

  1. 为什么这是非法的?如果我将函数更改为: {pAttr_Element* getXmlAttr....} 它可以工作,但我不明白为什么。

在我的结构中,我有一个指向数组的指针,其中每个单元格都是 pAttr_Element 类型的指针,对吗?或者它不是指向数组的指针?我迷路了:(

  1. 如果我将函数更改为:Attr_Element getXmlAttrArray(..),为什么它不起作用? 当我返回:node->attr_arr返回类型是什么?

  2. 如何更改结构以返回指向 pAttr_elements 数组的指针?

谢谢!

最佳答案

attr_arr 字段是 pAttr_Element 数组,而不是 pAttr_Element。因此您不能将其作为 pAttr_Element 返回。
在 C 中,数组不是指针,但在许多情况下它们会退化为指针。当您编写return node->attr_arr时,数组将衰减为一个指针,然后返回该指针。

xml_Element 结构不包含指向 pAttr_Element 数组的指针。它实际上包含 100 个这样的结构。

关于c - C 中返回值类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11814791/

相关文章:

c - 如何在 NPAPI C 插件中获取 NPP 实例

c - 在取消引用之前为未初始化的指针赋值

java - 制作对象数组

arrays - 如何保存 GMSPlace 数组

c - 从动态分配的二维数组中获取值

c++ - 为什么在链表中使用指向结构的指针而不是常规的结构类型变量?

c - 链表上的 map/reduce/filter... map 失败! (在 C 中)

fork 后子进程无法正常工作

iphone - 初始化不同对象的最佳方式

ruby map !函数和嵌套数组