C 表示指针

C 表示指针,c,struct,typedef,C,Struct,Typedef,如果ListofChar是指向Char(不要与Char)的指针,它表示struct charact, 那么作废报告(listofchars)中的listofchars是什么意思呢? chars是否仅表示指针ListofChar #include <stdio.h> #include <stlib.h> struct charact { char ch; int occurs; struct charact *next; };

如果
ListofChar
是指向
Char
(不要与
Char
)的指针,它表示
struct charact

那么
作废报告(listofchars)
中的
listofchars
是什么意思呢?
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;
   }
#包括
#包括
结构特征{
char ch;
int出现;
结构特征*下一步;
};
typedef结构字符字符;
typedef Char*ListofChar;
typedef Char*CharNode_ptr;
无效字母(字符名称[50],ListofChar*chars_ptr);
作废报告(现金清单);
Char*createnode(Char-ch);
int main(){
字符名[50];
ListofChars=NULL;
scanf(“%s”,名称);
字母(姓名和字符);
报告(chars);
返回0;
}
Char*createnode(Char ch){
CharNode_ptr newnode_ptr;
newnode_ptr=malloc(sizeof(Char));
新建节点\u ptr->ch=ch;
newnode_ptr->occurs=0;
newnode_ptr->next=NULL;
返回newnode\u ptr;
}
是和否。
代码似乎是为了暗示“一个字符”和“多个字符”的区别而编写的

比如:

Char
是一个单一的结构。
ListOfChar
本身就是一个指向单个
Char
的指针,但它意味着后面还有更多的字符。通过某种识别最后一个参数的方法,这允许函数只使用一个参数处理多个参数。即使不知道有多少人

还有另一个类似的构造,您在问题中没有提到,它与所示代码中未使用的声明不同,
CharNode\u ptr
。如果您允许一些纯粹的推测,我猜上面的“更多后续”将作为一个链表在代码的其余部分实现。
这里的含义稍有不同(或者更详细),它建议您通过每个结构中的链接
next
找到“其他”字符的附加细节,前提是该链接不为空。
当使用
ListOfChar
类型标识符时,例如在函数的API(显示的原型)中,编写代码可能并不暗示此细节

比如:

ListofChar
的意思是:
“嘿,用户,别担心,它不知何故不止一个;但您不需要知道确切的方式。”

CharNode\u ptr
表示:

“嘿,程序员,记住你在处理链表。”

这个答案是基于我对你的问题的理解,如下所示,我认为你的问题在于使用指针和指针声明数组

正如您所知,每个变量都是一个内存位置,每个内存位置都定义了其地址。任何给定类型的指针都包含指向内存位置的地址。对于你的情况,考虑下面的例子。

结构特征*a

我们定义了一个类型为“struct charact”的指针“a”,现在指针“a”持有一个垃圾值,如果您尝试为它赋值,它将给您一个错误,因为当您赋值时,系统转到“a”会占用垃圾值,并将其视为一个内存地址,它必须在其中放入给定的值,因为垃圾地址可能没有分配给您。要在“a”处赋值,首先必须使用malloc()或任何其他内存分配函数初始化“a”。执行此操作时,malloc()将向您返回一个内存地址,然后您可以启动并为“a”赋值

现在来回答您的问题,定义“a”可以充当数组或指向结构的指针。这取决于使用malloc()为变量分配的内存量。您可能会按如下方式分配值-

a=(结构特征*)malloc(大小f(结构特征)*n)


如果n>1,那么您将获得一个内存地址,该地址能够容纳比结构字符更多的字符,因此将作为一个数组使用;如果n=1,那么您只能容纳一个结构字符,因此它是一个单独的实体。

提示:避免使用指针的typedef,这将为您今后节省一些麻烦。