c语言在指针中打印出来的值?

时间:2017-10-01 19:38:07

标签: c pointers binary-search-tree inorder

我试图在整数指针中打印出值。该指针按顺序存储二进制搜索树键。

所以我的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的内存地址,而不是值。 如何打印出指针的值? 提前谢谢!

2 个答案:

答案 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]