C中的struct是什么?

时间:2013-08-20 09:30:04

标签: python c

我是C的新手,这可能是一个基本问题。

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

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

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

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

3 个答案:

答案 0 :(得分:2)

这句话做了两件事:

  • 它声明了一个新类型struct globalArgs_t作为包含7个字段的结构
  • 它声明了globalArgs类型的新变量struct globalArgs_t。可以使用.运算符访问其字段,例如:globalArgs.verbosity = 2;

答案 1 :(得分:2)

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

如果为globalArgs_t分配了足够的内存,那么noIndex将在该内存区域中具有偏移量0,langCode将具有偏移量4(偏移量为noIndex加上大小noIndex)。

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

答案 2 :(得分:1)

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

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;
}