c - 基本指针 C 编程

标签 c pointers

嘿,我试图仅在参数 1 大于参数 2 时切换这两个参数。

到目前为止我得到的是:

#include <stdio.h>

void ascending2(int*, int*);

int main(void){
    int ptr1 = 20;
    int ptr2 = 10;
    printf("ptr1 = %d, ptr2 = %d", ascending2(&ptr1, &ptr2));
    return 0;
}

void ascending2(int *ptr1, int* ptr2){
    int *value; 
    if( *ptr1 >= *ptr2 ){
         *value = *ptr1;
         *ptr1 = *ptr2;
         *ptr2 = *value;}
}

任何人都可以指出我可能哪里出错了,谢谢。

最佳答案

这是因为在 ascending2 函数中,您将 value 声明为指针,但实际上并没有让它指向任何地方。因此,当您取消引用它时,您取消引用了一个未初始化的指针,该指针导致 undefined behavior .

有两个明显的解决方案:要么让 value 指向某个有效的地方,要么将它声明为非指针变量更好。


你的 printf 调用也有问题,因为 ascending2 被声明为返回 void,换句话说它不返回任何东西根本没有,但是您打印了两个值。这也会导致未定义的行为。

这里的解决方法是单独调用函数,然后用ptr1ptr2变量调用printf(顺便说一句不是很好命名,因为它们实际上不是指针)。

关于c - 基本指针 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519080/

相关文章:

c - C中常量的内存地址

c++ - 是否有导致 50% 分支预测未命中的代码?

c - 模数运算符与零(重新 : arc4random_uniform source)

C xor 加密替代方案

c++ - 我在 C 中有相互依赖的 header ,这给了我错误。我怎样才能删除它?

c - 终端窗口大小不使用 ioctl 更新

c - 将整个 char 指针清零

c - 如何创建 C 宏来定义函数 typedef?

c++ - 我们应该使用什么作为 std::strcpy 的第二个参数?

c - 新声明后内存地址是否改变?