int* difference (int *a, int *b){
if (*a > *b){
*a = *a - *b;
}else{
*a = *b - *a;
}
return a;
}
int main (){
int *xp, *yp;
int x, y;
x = 9;
y = 7;
xp = &x;
yp = &y;
xp = difference (xp,yp);
printf("xp value: %d\n", *xp);
return 0;
}
由于某些原因,我需要我的程序对单维数组进行一些数学运算。我在这里发布了一个示例,因为我担心差异函数及其返回值。
这两个值都是指针,但我需要这样做,因为我无法确定哪些值更重要。我的做事方式是一种好的做法,还是有更好的方法解决这个问题?
答案 0 :(得分:2)
就个人而言,我尽量避免指针,如果不是,总是检查空指针。在这种情况下,我会修改difference()
:
int difference (int a, int b){
if (a > b){
return a - b:
return b - a;
}
使用这种新方法,您无需检查空值:
int* difference (int *a, int *b){
if (a && b)
{
if (*a > *b){
*a = *a - *b;
}else{
*a = *b - *a;
}
return a;
}
// and what must I do with null pointers???????
}
此外,在main函数中,您不需要从int:
创建指针int main (){
int x, y;
x = 9;
y = 7;
x = sum (x, y);
printf("xp value: %d\n", x);
return 0;
}
在简历中,如果没有必要,请尽量避免使用指针,否则,请始终检查空值
答案 1 :(得分:0)
我不明白为什么你在这里使用指针。您的difference()
函数始终将差异分配给*a
,并始终返回a
。您也可以只使用两个int
参数并返回int
- 这样可以正常工作。
实际上,即使您没有将difference()
的返回值分配给任何内容,也会修改a
指向的值。将返回值分配给作为a
参数传递的同一指针变量是不必要的 - 您将其设置为已有的相同值。无论如何,通过a
在函数中修改指向的内容。
非指针版本:
int difference(int a, int b)
{
if (a > b)
return a - b;
else
return b - a;
}
或者同样的事情,但更短:
int difference(int a, int b)
{
return (a > b) ? (a - b) : (b - a);
}
然后代替
xp = difference(xp,yp);
你要用
x = difference(x,y);
或者xp
和yp
:
*xp = difference(*xp,*yp);
请记住,您不需要仅使用函数内部的值来创建函数参数指针。只有在想要修改在函数外的变量时才需要指针,而不是通过为函数指定函数的返回值。由于您总是在这里修改一个变量,您只需将函数的返回值赋给它,而不是通过函数内的指针修改它。函数内部的所有东西都可以正常工作 - 作为参数传递的副本 - 它不需要指向原始变量的指针,而像int
之类的简单类型传递指针而不仅仅是值,无论如何都会降低效率...虽然像大struct
这样更大的类型,有时候传递指针会更好,即使你不是非常需要。