(C/C++)结构初始化语法

(C/C++) struct initalization syntax

本文关键字:结构 初始化 语法 C++      更新时间:2023-10-16

当我制作自己的结构时,说:

struct myStruct{
    int data1;
    int data2;
    string data3;
}

我可以初始化myStruct类型的实例,如下所示:

myStruct instance1;

所以我的问题是,为什么我经常看到在初始化结构时写"struct"也许这是一个不准确的说法,所以这里有一个我的意思的例子:

/*This is a tiny program that checks
  to see if a file exists in
  the current working directory. */
#include <sys/stat.h>
#include <iostream>
using namespace std;
const string FILENAME = data.txt;
int main(){
    struct stat fileStatus; //<-- HERE HERE HERE!
    if (FileExists(FILENAME, fileStatus)){
        cout << "File Does Exist" << endl;
    }else{
        cout << "File Does NOT Exist" << endl;
    }
    return 0;
}
bool FileExists(const string & fileName,struct stat & fileStatus){
    bool fileDoesNotExist = stat (fileName.c_str(), &fileStatus);
    return !fileDoesNotExist;
}

>第13行:结构体stat fileStatus;

这是出于某种原因在C中执行的操作吗
有宏或typedef的东西

我只是不明白为什么会这样。

这是一个C的东西;没有充分的理由继续在C++中这样做1

在C中,struct是类型名称的一部分,例如:

struct foo { int x; };

定义了一个称为CCD_ 2的类型。在C++中,它定义了一个名为foo的类型。在C语言中,你通常可以将这种愤怒隐藏在typedef:后面

typedef struct foo { int x; } foo;


1至少,不在不可能也编译为C的代码中(比如你问题中的例子)。

您可以按如下方式调用它:

typedef struct mystruct
{
    int itema;
    int itemb;
Etc...
}* mystruct;

因此,每当你创建一个mystruct项时,它都会创建一个指向你的结构的指针,否则你必须通过调用你的结构

struct-mystruct*对象;