我是C的新手,这可能是一个基本问题。
在阅读C源文件时,我发现了这一点:
struct globalArgs_t {
int noIndex;
char *langCode;
const char *outFileName;
FILE *outFile;
int verbosity;
char **inputFiles;
int numInputFiles;
} globalArgs;
对我来说,globalArgs_t
似乎是一种功能,但肯定不是。这个对象是什么?他们用的是什么?我该如何使用它?
我在寻找示例,我有Python背景。
答案 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;
}