如果ListofChar
指向Char
(不要与char
混淆)代表struct charact
的指针,
那么ListofChar chars
中的void report(ListofChar chars)
是什么意思?
chars
是否只代表指针ListofChar
?
#include <stdio.h>
#include <stlib.h>
struct charact {
char ch;
int occurs;
struct charact *next;
};
typedef struct charact Char;
typedef Char * ListofChar;
typedef Char * CharNode_ptr;
void letters(char name[50], ListofChar * chars_ptr);
void report(ListofChar chars);
Char * createnode(char ch);
int main() {
char name[50];
ListofChar chars = NULL;
scanf("%s", name);
letters(name, &chars);
report(chars);
return 0;
}
Char * createnode(char ch) {
CharNode_ptr newnode_ptr ;
newnode_ptr = malloc(sizeof (Char));
newnode_ptr -> ch = ch;
newnode_ptr -> occurs = 0;
newnode_ptr -> next = NULL;
return newnode_ptr;
}
答案 0 :(得分:3)
是和否。
似乎编写代码意味着&#34;一个字符&#34;以及&#34;许多字符&#34;。
类似的东西:
Char
是一个,一个结构
ListOfChar
本身就是指向单个Char
的指针,但它意味着它有更多的跟随。通过某种方式识别最后一个,这允许函数在几个上工作,只有一个参数。即使不立即知道有多少。
还有另一个类似的构造,您在提出的问题中没有提及,而且除了在显示的代码CharNode_ptr
中未使用的声明之外。如果你允许一些纯粹的猜测,我猜测&#34;更多关注&#34;从上面开始,作为链表在代码的其余部分实现
这里的含义略有不同(或者只是更详细),它建议您找到&#34;其他&#34;如果它不是NULL,则通过每个结构内的链接next
进行特征描述
在使用ListOfChar
类型标识符(例如,{1}}标识符时,可能会将代码编写为不表示此详细信息。在API(显示原型)中的功能。
类似的东西:
ListofChar
表示:
&#34;嘿用户,别担心,它不止一个;但你不需要知道究竟是怎么回事。&#34;
CharNode_ptr
表示:
&#34;嘿程序员,请记住你正在处理链接列表。&#34;
答案 1 :(得分:2)
这个答案是基于我对你的问题的理解,如下所示,我认为你的问题在于使用指针和指针声明数组。
如您所知,每个变量都是一个内存位置,每个内存位置都定义了其地址。任何给定类型的指针都包含内存位置的地址。对于您的情况,请考虑以下示例。
struct charact * a;
我们定义一个'struct charact'类型的指针'a',因为现在指针'a'包含一个垃圾值,如果你尝试为它指定一些东西会给你一个错误,因为当你指定系统时会转到'a'占用垃圾值并将其视为内存地址,它必须放置无法完成的给定值,因为垃圾邮件地址可能未分配给您。要在'a'处分配值,首先必须使用malloc()或任何其他内存分配函数初始化'a'。这样做malloc()会返回一个内存地址,然后你可以启动并为'a'赋值。
现在提出你的问题,定义'a'可以充当数组或指向结构的指针。这取决于使用malloc()分配给变量的内存量。您可能会按如下方式分配值 -
a =(struct charact *)malloc(sizeof(struct charact)* n)
如果n> 1,那么你将得到一个内存地址,它能够保存更多的结构charact,因此将作为一个数组工作,如果n = 1,你只能拥有一个结构特征,因此它是一个单一的实体。