struct fact_entry *fact_table; 是什么意思?意思是?
What does the struct fact_entry *fact_table; mean?
我的任务是完成一段代码,打印来自命令行输入的数字的阶乘。我试图理解代码,但我是 C 编程和结构的新手,所以我不确定 struct fact_entry *fact_table; 的作用是什么?确实而且我不知道如何编程 fact_table 以便使用以下行访问变量:
printf ("%d %lld %s\n",
fact_table[i].n, fact_table[i].lli_fact, fact_table[i].str_fact);}
你能帮帮我吗?
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define LIMIT 20
struct fact_entry
{ /* Definition of each table entry */
int n;
long long int lli_fact; /* 64-bit integer */
char *str_fact;
};
void
panic (char *m)
{
fprintf (stderr, "%s\n", m);
exit (0);
}
int
main (int argc, char *argv[])
{
int n;
int i;
struct fact_entry *fact_table;
if (argc != 2)
panic ("wrong parameters");
n = atoi (argv[1]);
if (n < 0)
panic ("n too small");
if (n > LIMIT)
panic ("n too big");
/* Your code starts here */
// Allocate memory
// Compute fact(n) for i=0 to n
/* Your code ends here */
// print computed numbers
for (i = 0; i <= n; i++)
{
printf ("%d %lld %s\n", fact_table[i].n, fact_table[i].lli_fact,
fact_table[i].str_fact);
}
/* Your code starts here */
// Free memory
/* Your code ends here */
return 0;
}
我认为在关注什么是结构时可以最好地回答这个问题。在您的情况下,您可以看到一个结构被定义为
struct fact_entry
{ /* Definition of each table entry */
int n;
long long int lli_fact; /* 64-bit integer */
char *str_fact;
};
您可以将结构体视为一组数据。在这种情况下,数据由一个称为 n
的整数、一个称为 lli_fact
的 long long int 和一个称为 str_fact
的字符指针组成。您可以直接或作为指针定义一个新结构。但是,当您将结构定义为指针时,您必须指向 calloc()
,即 'free',该结构的内存(否则您将得到 segmentation fault
)。
这意味着:
struct fact_entry fact_table;
或者,作为 pointer/array:
struct fact_entry *fact_table;
但是,就像我说的,要在后者中不获得 segmentation fault
,您需要分配内存。根据定义,您知道一个结构所需的内存将为 sizeof(struct fact_entry)
。那么:
fact_table = calloc(n, sizeof(struct fact_entry));
这将为 n
结构分配内存。现在,您可以使用以下方式访问结构的每个字段:
fact_table[i].n = someVal1;
fact_table[i].lli_fact = someVal2;
fact_table[i].str_fact = somePointerToCharacterArray;
以后打印内容可以用:
printf ("%d %lld %s\n", fact_table[i].n, fact_table[i].lli_fact,
fact_table[i].str_fact);
但是,这只是对什么是结构及其工作原理的简要概述。我没有涵盖任何细节,也没有包括所有细节。有关此主题的更多信息,您可以阅读更多 here.
我的任务是完成一段代码,打印来自命令行输入的数字的阶乘。我试图理解代码,但我是 C 编程和结构的新手,所以我不确定 struct fact_entry *fact_table; 的作用是什么?确实而且我不知道如何编程 fact_table 以便使用以下行访问变量:
printf ("%d %lld %s\n",
fact_table[i].n, fact_table[i].lli_fact, fact_table[i].str_fact);}
你能帮帮我吗?
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define LIMIT 20
struct fact_entry
{ /* Definition of each table entry */
int n;
long long int lli_fact; /* 64-bit integer */
char *str_fact;
};
void
panic (char *m)
{
fprintf (stderr, "%s\n", m);
exit (0);
}
int
main (int argc, char *argv[])
{
int n;
int i;
struct fact_entry *fact_table;
if (argc != 2)
panic ("wrong parameters");
n = atoi (argv[1]);
if (n < 0)
panic ("n too small");
if (n > LIMIT)
panic ("n too big");
/* Your code starts here */
// Allocate memory
// Compute fact(n) for i=0 to n
/* Your code ends here */
// print computed numbers
for (i = 0; i <= n; i++)
{
printf ("%d %lld %s\n", fact_table[i].n, fact_table[i].lli_fact,
fact_table[i].str_fact);
}
/* Your code starts here */
// Free memory
/* Your code ends here */
return 0;
}
我认为在关注什么是结构时可以最好地回答这个问题。在您的情况下,您可以看到一个结构被定义为
struct fact_entry
{ /* Definition of each table entry */
int n;
long long int lli_fact; /* 64-bit integer */
char *str_fact;
};
您可以将结构体视为一组数据。在这种情况下,数据由一个称为 n
的整数、一个称为 lli_fact
的 long long int 和一个称为 str_fact
的字符指针组成。您可以直接或作为指针定义一个新结构。但是,当您将结构定义为指针时,您必须指向 calloc()
,即 'free',该结构的内存(否则您将得到 segmentation fault
)。
这意味着:
struct fact_entry fact_table;
或者,作为 pointer/array:
struct fact_entry *fact_table;
但是,就像我说的,要在后者中不获得 segmentation fault
,您需要分配内存。根据定义,您知道一个结构所需的内存将为 sizeof(struct fact_entry)
。那么:
fact_table = calloc(n, sizeof(struct fact_entry));
这将为 n
结构分配内存。现在,您可以使用以下方式访问结构的每个字段:
fact_table[i].n = someVal1;
fact_table[i].lli_fact = someVal2;
fact_table[i].str_fact = somePointerToCharacterArray;
以后打印内容可以用:
printf ("%d %lld %s\n", fact_table[i].n, fact_table[i].lli_fact,
fact_table[i].str_fact);
但是,这只是对什么是结构及其工作原理的简要概述。我没有涵盖任何细节,也没有包括所有细节。有关此主题的更多信息,您可以阅读更多 here.