我正在尝试打印整数指针中的值。该指针按顺序存储二叉搜索树键。
所以我的中序函数是,
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
的内存地址,而不是值。
如何打印出指针的值?
提前致谢!
最佳答案
有关“打印地址”的问题是,使用 printf("%d", &nums[i])
,您实际上获取了“某物”的地址。请注意,&anObject
给出了 anObject
的内存地址,&nums[i]
给出了 nums[i]< 的内存地址
(这是 nums
第 i 个元素的地址)。顺便说一句:%d
是指针值的错误格式说明符,这样做实际上会产生未定义的行为。
要打印整数值,请改用 printf("%d", nums[i])
。
请进一步注意,主函数中的代码不会为 nums
分配任何内容,因此您的程序将写入未初始化的内存,并再次产生未定义的行为。
至少使用 int* numPtr = calloc(MAXNODES, sizeof(int))
来代替,从而确保每个条目都使用 0
进行初始化。否则,您在 nums[i] !='\0'
中的比较(顺便说一句,应该写成 nums[i] != 0
)可能会失败,稍后再次通向 UB。
关于C语言打印指针中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516172/