【问题标题】:c language printing out value in pointer? [duplicate]c语言在指针中打印出值? [复制]
【发布时间】:2018-03-12 23:21:25
【问题描述】:

我正在尝试打印整数指针中的值。该指针按顺序存储二叉搜索树键。

所以我的中序函数是,

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

【问题讨论】:

  • &nums[i] 中的& 会返回内存地址。只有字符串需要它。
  • @0decimal0 你有什么理由不投票关闭作为重复并发表评论?
  • @bolov 我猜是我的特权。
  • @0decimal0 是什么意思?
  • @bolov 关闭投票权限从 5k 代表开始。

标签: c pointers binary-search-tree inorder


【解决方案1】:

关于“打印地址”的问题是,使用printf("%d", &nums[i]),您实际上获取了“某物”的地址。请注意,&anObject 给出了anObject 的内存地址,&nums[i] 给出了nums[i] 的内存地址(这是nums 的第i 个元素的地址)。顺便说一句:%d 是错误的指针值格式说明符,这样做实际上会产生未定义的行为。

要打印整数值,请改用printf("%d", nums[i])

请进一步注意,您的 main 函数中的代码不会为 nums 分配任何内容,因此您的程序将写入未初始化的内存并再次产生未定义的行为。

至少使用int* numPtr = calloc(MAXNODES, sizeof(int)),从而确保每个条目都使用0 进行初始化。否则,您在nums[i] !='\0'(顺便说一句,应该写为nums[i] != 0)中的比较可能会失败,稍后再次导致UB。

【讨论】:

  • 我将numPtr 编辑为numPtr = (node*)malloc(sizeof(int)); 并尝试过。但没有任何运气。然后我按照您的描述更改了它numPtr=calloc(sizeof(node*), sizeof(int));,但也不是运气。 MAXNODES 与 sizeof(node*) 相同还是您的意思不同?
【解决方案2】:

尝试nums[i] 而不是&nums[i]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2016-08-17
    • 2011-01-29
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多