簡體   English   中英

C-指向結構體的指針的指針

[英]C - pointer to struct to array of pointers

我在每個節點中都有一個帶有哈希表的鏈表。 哈希表由指向結構的指針數組實現。 整個管理是通過指向鏈接列表的全局靜態指針進行的。

  • 我改變了一點問題! 現在這個問題更加集中。

在查找和插入功能中,使代碼更短,我分配

temp = cur_table->symbols_table[entry];

但我看到temp一直都為NULL。 我不明白為什么會這樣?

以下3個模塊中的代碼。 謝謝你在前面。

symbol.h文件:

#include <stdlib.h>
#include <stdio.h>

#define TABLE_SIZE 26

typedef struct symbol_node
{
  char* name;
  int type;
  int role;

  struct symbol_node* next;

} symbol_node;

typedef struct table_node
{
  struct symbol_node* symbols_table[TABLE_SIZE];
  struct table_node* prev;
  struct table_node* next;

} table_node;


static struct table_node* cur_table;

//functions declarations:
void init_table();
int hash_function(char* id);
symbol_node* lookup(char* id_name);
symbol_node* insert(char* id_name);
// debug
void printtable();

符號

 void init_table() // creates the first node                                                                                                                                                                        
 {
  int i = 0;
  cur_table = NULL;

  cur_table = (table_node*)malloc(sizeof(table_node));

  cur_table->prev = NULL;
  cur_table->next = NULL;

  for(i=0; i < TABLE_SIZE; i++)
    {
      cur_table->symbols_table[i] = NULL;
    }
}

symbol_node* lookup(char* id_name)  // returns null if the id name not found                                                                                                                                       
{
  symbol_node* result = NULL;
  symbol_node* temp = NULL;
  int entry = atoi(id_name);

  temp = cur_table->symbols_table[entry];

  while(temp != NULL)
    {
      if( strcmp( id_name, temp->name ) == 0 )
    {
          result = temp;
          break;
        }
      else
        temp = temp->next;
    }

  return result;
}


symbol_node* insert(char* id_name)
{
  symbol_node* result = NULL;
  symbol_node* temp = NULL;
  int index = -1;

  if(lookup(id_name)==NULL)
    {
      index = atoi(id_name);
      temp = cur_table->symbols_table[index];

      while(temp!=NULL)
        {
          temp = temp->next;
        }

      temp = (symbol_node*)malloc(sizeof(symbol_node));
      temp->next = NULL;
      temp->name = id_name;
      // TODO: other params                                                                                                                                                                                        

      result = temp;
    }

  return result;
}
void printtable()
{
int i=0;

for(i=0; i<TABLE_SIZE; i++)
{
    if(cur_table->symbols_table[i]==NULL)
        printf("NULL at index %d\n",i);
    else
        printf("There are something\n");
}
}

main.c

void main()
{
int i=0;
symbol_node* t = NULL;
symbol_node* tt = NULL;
init_table();

t = insert("markhit");
t = insert("mark");

tt = lookup("mark");

printtable();

_getch();

  free(t);
  free(tt);
  free(cur_table);
}

靜態避免內存分配[`malloc']。 試試吧

cur_table = new table_node;

對於靜態分配的內存,由於內存原因,您無法設置值。 當您插入時,它不會重新分配您的cur_table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM