-4

我是 C 新手,这可能是一个初级问题。

在阅读 C 源文件时,我发现了这一点:

struct globalArgs_t {
    int noIndex;
    char *langCode;
    const char *outFileName;
    FILE *outFile;
    int verbosity;  
    char **inputFiles;
    int numInputFiles;
} globalArgs;

对我来说,globalArgs_t这似乎是一个肯定不是的功能。这个对象是什么?它们的用途是什么?我该如何使用它?

我正在寻找示例,我有 Python 背景。

4

3 回答 3

2

这个语句做了两件事:

  • 它将新类型声明struct globalArgs_t为包含 7 个字段的结构
  • 它声明了一个globalArgs类型为 的新变量struct globalArgs_t。它的字段可以通过.操作符访问,例如:globalArgs.verbosity = 2;
于 2013-08-20T09:33:09.927 回答
2

这是一种使用名称定义相对于内存中指针的偏移量的方法。

如果为 分配了足够的内存globalArgs_t,则noIndex该内存区域中的偏移量为 0,langCode偏移量为 4(偏移量为 的noIndex加大小noIndex)。

这样,您可以轻松访问保存在内存中的不同值,而无需记住确切的偏移量。它还将使您的代码更具可读性,因为您可以为每个偏移量指定一个有用的名称,并且 C 编译器可以在您分配值时进行一些类型检查。

于 2013-08-20T09:33:36.180 回答
1

Astruct就像一个元组。您可以将其视为包含其他变量的变量。

struct globalArgs_t {
    int noIndex;
    char *langCode;
    const char *outFileName;
    FILE *outFile;
    int verbosity;  
    char **inputFiles;
    int numInputFiles;
} globalArgs;

// this function takes a pointer to a globalArgs_t struct
void myFunction(struct globalArgs_t *myStruct)
{
   // we're using the operator '->' to access to the elements 
   // of a struct, which is referenced by a pointer.
   printf("%i\n", myStruct->noIndex); 
}

int main()
{
    // We're using the operator '.' to access to the element of the structure
    globalArgs.noIndex = 5; 
    myFunction(&globalArgs); // A structure is a variable, so it has an address
    return 0;
}
于 2013-08-20T09:35:06.950 回答