我有这两个结构:
#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;
}
我有几个问题:
- 为什么这是非法的?如果我将函数更改为:
{pAttr_Element* getXmlAttr....}
它可以工作,但我不明白为什么。
在我的结构中,我有一个指向数组的指针,其中每个单元格都是 pAttr_Element 类型的指针,对吗?或者它不是指向数组的指针?我迷路了:(
如果我将函数更改为:
Attr_Element getXmlAttrArray(..)
,为什么它不起作用? 当我返回:node->attr_arr
返回类型是什么?如何更改结构以返回指向 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/