嘿,我试图仅在参数 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
,换句话说它不返回任何东西根本没有,但是您打印了两个值。这也会导致未定义的行为。
这里的解决方法是单独调用函数,然后用ptr1
和ptr2
变量调用printf
(顺便说一句不是很好命名,因为它们实际上不是指针)。
关于c - 基本指针 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519080/