如何在c / c ++中使用指针传递struct数组?

在C代码中,我坚持将一个struct数组传递给一个函数,这里的代码类似于我的问题:

 typedef结构
 {
    int x;
    int y;
    char * str1;
    char * str2;
 } Struct1;

 void processFromStruct1(Struct1 * content []);
 int main()
 {
     Struct1 mydata [] =
     {{1,1,“black”,“cat”},
       {4,5, “红”, “鸟”},
       {6,7, “褐色”, “狐狸”},
     };

     processFromStruct1(MYDATA); //!怎么样? 找不到正确的语法

    返回0;
 }

 void processFromStruct1(Struct1 * content [])
 {
     printf(“%s”,content [1]  - > str1); //如果我想打印'red',这是对的吗?
         ...
 }

msvc中的编译错误是这样的:

错误C2664:'processFromStruct1':无法将参数1从'Struct1 [3]'转换为'Struct1 * []'
 1>指出的类型是无关的; 转换需要reinterpret_cast,C风格的转换或函数式转换

怎么解决这个? TNX。

你几乎拥有它,或者这个

void processFromStruct1(Struct1 *content); 

或这个

 void processFromStruct1(Struct1 content[]); 

并且,正如Alok在评论中指出的那样,改变这一点

 content[1]->str1 

对此

 content[1].str1 

你的数组是一个结构数组,而不是一个指针数组,所以一旦你用[1]选择一个特定的结构,就没有必要进一步取消引用它。

尝试

 processFromStruct1( & mydata[ i ] ); // pass the address of i-th element of mydata array 

和方法

 void processFromStruct1(Struct1 *content ) { printf("%s", content->str1); ... } 

(John Knoeller和Alok已经注意到第二部分)。

John Knoeller给出了完美的语法,我试图解释一些基本的东西,我希望它将来解决你的困惑。 这与将指针传递给C中的函数非常相似。当然struct也是一个指针,

所以我们可以用2种方式传递值0.通过指针0.通过数组(因为我们使用的是struct数组)

所以现在问题很简单,你必须像普通指针那样给出变量的数据类型,这里的数据类型是用户定义的(即struct)Struct1然后变量名,变量名可以是指针或数组名称(选择兼容的方式)。

这对我有用。 将结构更改为C ++样式。

 struct Struct1 { int x; int y; char *str1; char *str2; }; Struct1 mydata[]= { {1,1,"black","cat"}, {4,5,"red","bird"}, {6,7,"brown","fox"}, }; void processFromStruct1(Struct1 content[]); int main() { processFromStruct1(&mydata[1]); return 0; } void processFromStruct1(Struct1 content[]) { printf("%s",content->str1); } 

输出:红色

您可以尝试将原型作为void processFromStruct1(Struct1 content[]); 然后声明应该像void processFromStruct1(Struct1 content[])