【发布时间】:2014-09-01 11:30:59
【问题描述】:
我有一个 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 ?
这里数据是两个结构中的第一个值。所以指针(结构)处的值应该打印第一个数据的值,对吧?
【问题讨论】:
-
请正确格式化您的代码。
-
不要使用
%x打印数据指针,而是使用%p。你不能用%x类似地打印struct node对象。打印未初始化值的结果定义不明确,可能是任何垃圾,包括但不限于 0。这里您打印的是第一个成员,但它可能会在其他目标上打印其他内容。 -
printf("\n*rootptr %x\n",*rootptr);是什么意思?您是否要打印数据所持有的值? -
我们已经帮助您格式化代码。快完成了。请花点时间缩进
main的后半部分以匹配其余缩进。 -
这里我正在查看我可以将 *tmp 打印为 9 的问题。但 *rootptr 作为一些垃圾。我预计它是 8。为什么会这样?