gpt4 book ai didi

c - 需要一些指针方面的帮助

转载 作者:行者123 更新时间:2023-11-30 15:04:34 25 4
gpt4 key购买 nike

在此程序中,我尝试在函数 中打印 tailtail->nexttail->data 值SortedMerge(结构节点* a,结构节点* b)。我创建了一个像 5->10->15 这样的链表,其头指针“a”和 2->3->20 具有头指针“b”:

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

struct node
{
int data;
struct node* next;
};


struct node* SortedMerge(struct node* a, struct node* b)
{
/* a dummy first node to hang the result on */
struct node dummy;

/* tail points to the last result node */
struct node* tail = &dummy;
printf("tail %d \n",tail);
printf("tail->next %d \n",tail->next);
printf("tail->data %d \n",tail->data);
}

/* Function to insert a node at the beginging of the
linked list */
void push(struct node** head_ref, int new_data)
{
/* allocate node */
struct node* new_node =
(struct node*) malloc(sizeof(struct node));

/* put in the data */
new_node->data = new_data;

/* link the old list off the new node */
new_node->next = (*head_ref);

/* move the head to point to the new node */
(*head_ref) = new_node;
}

/* Drier program to test above functions*/
int main()
{
struct node* res = NULL;
struct node* a = NULL;
struct node* b = NULL;
push(&a,5); //some more like this (5->10->15)
push(&b,2); //some more like this (2->3->20)
res = SortedMerge(a, b);

return 0;
}

我的输出是这样的。

tail -686550032 
tail->next 15585456
tail->data 1

谁能给我解释一下吗?

最佳答案

正如 Ari0nhh 所说,为了避免未定义的行为,您的 SortedMerge 函数必须使用 %p 来打印指针地址,如下所示:

printf("tail %p \n",tail);
printf("tail->next %p \n",tail->next);

导致类似的事情

tail 0x7fff9c7f2f80
tail->next 0x7fff9c7f2fb8
tail->data 0

但是如果您想与输入数据进行交互,则应该在函数中使用它们:

struct node* SortedMerge_a(struct node* a, struct node* b)
{
printf("a %p \n",a);
printf("a->next %p \n",a->next);
printf("a->data %d \n",a->data);
}

给出

a 0x601010
a->next (nil)
a->data 5

关于c - 需要一些指针方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40253111/

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