我试图在整数指针中打印出值。该指针按顺序存储二进制搜索树键。
所以我的inorder函数是,
int traversal(int* num,node *t, int i) {
if (t == NULL) {
return i;
}
if (t->left != NULL) {
i = traversal(num, t->left, i);
}
num[i] = &(t->value);
i++;
if (t->right != NULL) {
i = traversal(num, t->right, i);
}
return i;
}
打印功能是,
void traversalPrint(int* nums) {
for (int i = 0; nums[i] !='\0'; i++) {
printf("%d", &nums[i]);
}
}
int main(){
int* numPtr = (node*)malloc(sizeof(int*));
node* bst = NULL:
traversal(numPtr, bst, 0);
traversalPrint(numPtr);
}
我的问题是traversalPrint
函数打印出numPtr
的内存地址,而不是值。
如何打印出指针的值?
提前谢谢!
答案 0 :(得分:1)
有关“打印地址”的问题是printf("%d", &nums[i])
,您实际上会使用“某事”的地址。请注意,&anObject
为您提供anObject
的内存地址,&nums[i]
提供nums[i]
的内存地址({{1}的第i个元素的地址}})。 BTW:nums
是指针值的错误格式说明符,实际上你通过这样做会产生未定义的行为。
要打印整数值,请改用%d
。
进一步注意,main函数中的代码不会为printf("%d", nums[i])
分配任何内容,这样您的程序将写入非初始化内存并再次产生未定义的行为。
至少使用nums
,从而确保使用int* numPtr = calloc(MAXNODES, sizeof(int))
初始化每个条目。否则,您在0
(BTW,应写为nums[i] !='\0'
)中的比较可能会失败,以后再次导致UB。
答案 1 :(得分:0)
尝试使用nums[i]
代替&nums[i]
。