【问题标题】:C++ Passing an array of struct as function argumentC ++将结构数组作为函数参数传递
【发布时间】:2016-06-12 19:39:09
【问题描述】:

C++:如下所示的代码和同时在函数声明和定义中省略关键字struct 之间有什么区别——代码似乎以两种方式工作?

#include <iostream>
#include <string>

struct student{
            int age;
            int number;
        };

void printme( struct student m[]);    // if 'struct' is omitted the code works as fine

int main()
{        
    student s[3];
    s[0].age = 10;
    s[0].number = 333;

    printme(s);

    return 0;
}

void printme( struct student m[]){
        printf("George age and number: %d, %d \n", m[0].age, m[0].number);
    }

【问题讨论】:

  • 在 C++ 中,没有区别。
  • 它主要是向后兼容 c - 两个选项是相同的。
  • 实际上没有this work fine?我不明白你的问题。
  • 将关键字struct 更改为class,您就会明白为什么会这样了。 C++ Does Not Have Structs
  • @πάνταῥεῖ OP 询问为什么它在函数声明中没有 struct 关键字起作用。

标签: c++ function struct parameters


【解决方案1】:

这来自 C,您必须在其中指定 struct(或使用 typedef)。在 C++ 中,只要您不为结构和对象使用相同的 id,就没有区别。请不要这样做,但如果你真的想这样做,那么你需要写例如struct student 用于类型,student 用于对象(如果您真的想混淆所有人,则不一定是学生类型)。基本上,C+ 编码标准倾向于建议跳过 struct 并且永远不要为 struct 和 object 使用相同的 id。

【讨论】:

    【解决方案2】:

    注意您使用的是不是 ,所以这里没有区别,您可以同时使用这两个选项。

    查看此:Passing structs to functions 了解更多信息。

    【讨论】:

    • 我假设在 C 中你必须使用“结构”,而在 CPP 中它是可选的?可能是为了代码兼容性?谢谢
    • 是的@IvoPeev。在c,除非你有一些typedef,否则你会收到一个编译器错误!
    • 为什么class而不是struct,如果两者是一样的?
    • “我鼓励你使用类而不是结构” 为什么?关键字class 和关键字struct 都引入了类。
    • @IvoPeev 顺便说一下,该语言称为 C++(而 cpp 是 C 预处理器)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多