代表一个指针

时间:2018-05-04 06:12:54

标签: c struct typedef

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

2 个答案:

答案 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,你只能拥有一个结构特征,因此它是一个单一的实体。