gpt4 book ai didi

c - 如何链接三个连续内存块

转载 作者:行者123 更新时间:2023-11-30 15:23:46 26 4
gpt4 key购买 nike

在我的下面的代码中:

typedef struct node {
key_t key;
struct node *left;
struct node *right;
} text_t;

void swapping(text_t *txt, char *new_line)
{
printf("enter\n");
text_t *tree;
tree=txt;
char *tmp;

if(tree->right!=NULL){
printf("inside\n");
tmp=(char *)tree->left;

tree->left=(text_t *) new_line;
++tree;

swapping(tree,tmp);
}
}

int main()
{
char text[256];
char text_new[256];
char *new_line, *nl,*object;

new_line=strcpy(text,"hello");
nl=strcpy(text_new,"world");

while (*new_line)
printf("%c",*new_line++);
printf("\n");

text_t *tmp,*tree;
tmp=(text_t *) malloc( 256 * sizeof(text_t) );

tree=tmp;

tmp->key=1;
tmp->left=(text_t *) new_line;
tmp->right=++tmp;

--tmp;

if(tmp->right==NULL)
{
printf("its NULL at key %d \n",tmp->key);
}

tmp++;

tmp->key=2;
tmp->left=(text_t *) new_line;
tmp->right=++tmp;

--tmp;

if(tmp->right==NULL)
{
printf("its NULL at key %d \n",tmp->key);
}
tmp++;

tmp->key=3;
tmp->left=(text_t *) new_line;
tmp->right=++tmp;

tmp->key=4;
tmp->left=(text_t *) new_line;
tmp->right=NULL;

swapping(tree,nl);

while(tree->right!=NULL){
printf("the element at key- %d is ", tree->key);
object=(char *)tree->left;
while(*object)
printf("%c",*object++);
printf("\n");
tree=tree->right;
}

return(0);
}

我需要将 3 个节点 (text_t) 连接在一起(就像链表一样)。我使用右节点指针指向下一个节点,最后一个节点指向NULL。但似乎这并没有按预期进行。在我分配 tmp->right=++tmp 并检查是否 tmp->right==NULL 后,它传递所有键 =1 到 4。我在这里做错了什么吗?

最佳答案

当你这样做

tmp->right=++tmp;

首先增加tmp,然后然后分配它。然后你稍后执行 tmp-- 并发现正确的指针为空。当然它是空的。 (执行此语句涉及首先评估右侧部分,在分配它之前递增 tmp,然后分配给现在递增的变量 tmp,用“右侧”成员进行偏移)您应该完成:

tmp->right= (tmp+1);

关于c - 如何链接三个连续内存块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655718/

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