C语言打印指针中的值?

标签 c pointers binary-search-tree 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的内存地址,而不是值。 如何打印出指针的值? 提前致谢!

最佳答案

有关“打印地址”的问题是,使用 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/

相关文章:

c - giflib I/O 回调

c - 'printf' 会一直工作吗?

c - 如何从文件中读取最后 2 个字节并在读取后删除它们

c - 打印函数中定义的指针的值和地址?

sorting - 为什么我们通过堆排序而不是二叉搜索树?

c - 解密——找回分割后的数字C编程

c++ - typedef 结构到结构数组

C 问题 - 不知道如何将指针分配给列表的开头

c - 在C中删除一个节点形成一个二叉搜索树

algorithm - 为什么 B-Tree 用于文件系统?