gpt4 book ai didi

c - 如何在指针数组中传递列表

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:49 25 4
gpt4 key购买 nike

我已经写了一段代码,我试图将一个列表传递给一个指针数组,但我的指针是空的。正如您在底部看到的那样,我从 main 调用该函数,我试图用一个列表填充每个指针 (termatika[j]),但是当我要打印它时,我得到了 null。

struct str {
char mitermatika[61];
struct node *termatika[10];
} pinakas[100];

struct node {
char terminalc[61];
struct node *next;
};

void add( struct node *ptr,char buffer[] )
{
ptr = (struct node *) malloc(sizeof(struct node ) );
strcpy( ptr->terminalc, buffer );
ptr->next=root;
root=ptr;
}

void terminal(char buffer[],struct node *pointer) {
initnode();
add( pointer,buffer);
}

void printnode( struct node *ptr )
{
printf("Name ->%s\n", ptr->terminalc );
}

这是我的主要内容:

terminal(buffer,pinakas[i].termatika[j]);
printnode(pinakas[0].termatika[0]);

最佳答案

在 C 中,尝试在函数调用中传递整个对象(尤其是对象数组/列表)从来都不是一个好主意。这会占用大量堆栈空间并导致处理器将大量内存从堆复制到堆栈,从而占用大量时钟周期。始终通过引用或指针传递对象。也就是说,看起来您正在尝试编写链表算法(我最喜欢的算法之一)。我建议尝试这样的事情:

typedef struct node_tag // <- Use typedef for easy reference in source
{
char terminalc[61]; // <- This will allocate space for an array of 8-bit characters for each node
node_tag *next; // <- Use struct tag to reference internally
} node_t; // <- This is the name of the node type to use in your source

node_t * nodeList = NULL; // <- Root pointer for your list.

void Add( node_t *ptr,char buffer[] ) // <- Remember char buffer[] is the same as char *buffer
{
// ptr will already be pointing to allocated memory, so do not reassign.
//ptr = (struct node *) malloc(sizeof(struct node ) );

strcpy( ptr->terminalc, buffer );

// When adding to a link list ptr-next should always be NULL.
ptr->next=NULL;

root=ptr;
}

void main( void )
{
ptr = (node_t*)malloc(sizeof(node_t));
Add( ptr, "Some character array" );
...
}

或者,如果您想要Add() 中分配内存,您可以这样做:

void Add( char buffer[] )
{
ptr = (struct node *) malloc(sizeof(struct node ) );

strcpy( ptr->terminalc, buffer );

ptr->next=NULL;

root=ptr;
}

请记住,您的 Add() 函数不应总是添加到 root,但它应该寻找列表的末尾。这可以通过 while 循环轻松完成,或者您的算法可以维护一个单独的 endOfList 指针变量,该变量始终指向列表中的最后一个节点。

关于c - 如何在指针数组中传递列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com