gpt4 book ai didi

C 结构初始化 - 有趣

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

我有一个 C 程序,它初始化两个结构并尝试打印它们的值。请参阅下面的代码。

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

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

typedef struct bstNode{
int data;
struct bstNode* right;
struct bstNode* left;
}bstNode_t;

main(){
struct bstNode* rootptr = malloc(sizeof(struct bstNode));

printf("\n*rootptr %x\n",*rootptr);
printf("rootptr = %x\n",rootptr);

rootptr->data = 8;
rootptr->left = NULL;

printf("\n*rootptr %x\n",*rootptr);
printf("rootptr = %x\n",rootptr);


node_t* tmp = (node_t*) malloc(sizeof(node_t));

printf("\n*tmp = %x",*tmp);
printf("\n tmp = %x\n",tmp);

tmp->data = 9;
tmp->next = NULL;

printf("\n*tmp = %x",*tmp);
printf("\n tmp = %x\n",tmp);
printf("\n ptr size = %x\n",sizeof(int));

}

程序的输出是

*rootptr  20fe1
rootptr = 4a78010

*rootptr 4691e000
rootptr = 4a78010

*tmp = 0
tmp = 4a78030

*tmp = 9
tmp = 4a78030

ptr size = 4

令我惊讶的是,*rootptr 值与 *tmp 不同。将值分配给变量之前和之后。为什么会发生这种情况?当 *tmp 可以将值打印为 9 时。为什么 *rootptr 不打印为 8 ?这里的 data 是两个结构中的第一个值。所以指针(结构)处的值应该打印第一个数据的值,对吗?

最佳答案

您无法使用

打印自定义结构的值
printf("\n*rootptr  %x\n",*rootptr);
printf("\n*tmp = %x",*tmp);

您应该编写一个自定义函数并调用它来打印 BST 和节点指针。例如:

int print_node(node_t *nd)
{
if(nd == 0) return printf("<null>");
else return printf("[data = %d, next = %p]", nd->data, nd->next);
}

然后替换 printf("\n*rootptr %x\n",*rootptr);

printf("\n*rootptr  ");
print_node(rootptr);
printf("\n");

类似地,您也可以编写自定义函数来打印 BST 节点。

关于 printf %x说明符,来自手册页

o, u, x, X
The unsigned int argument is converted to unsigned octal (o), unsigned decimal (u), or unsigned hexadecimal (x and X) notation. The letters abcdef are used for x conversions; the letters ABCDEF are used for X conversions. The precision, if any, gives the minimum number of digits that must appear; if the converted value requires fewer digits, it is padded on the left with zeros. The default precision is 1. When 0 is printed with an explicit precision 0, the output is empty.

如果参数不是无符号整数,您可能会得到奇怪的结果。

关于C 结构初始化 - 有趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25604901/

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