int func(int *x,int y,int cp,int dp) { *x++; cp = *x * *x +y * y; dp = *x * *x -y * y; } int main() { int a=4,b=3,c=5,d=6; func(&a,b,c,d); printf("%d,%d,%d,%d",a++,b,c,d); }
时间: 2023-11-22 21:54:24 浏览: 103
go语言中int和byte转换方式
这段代码存在一些问题。首先,函数`func`中修改指针`x`的值没有意义,因为`x++`只是将指针指向下一个地址,而并不改变指针所指向的值。其次,函数`func`中计算的`cp`和`dp`没有返回到主函数中,因此`printf`语句输出的结果与`func`中计算的结果无关。
同时,在主函数中,`a++`会将`a`的值加1,但是由于`a`在函数`func`中被修改过,因此输出的结果可能会出乎意料。
正确的代码应该是:
```
void func(int *x, int y, int *cp, int *dp) {
*cp = (*x) * (*x) + y * y;
*dp = (*x) * (*x) - y * y;
}
int main() {
int a = 4, b = 3, c = 0, d = 0;
func(&a, b, &c, &d);
printf("%d,%d,%d,%d", a, b, c, d);
return 0;
}
```
函数`func`中使用指针传递`cp`和`dp`的地址,然后通过指针修改它们的值。主函数中直接输出所有变量的值,不再使用`a++`。
阅读全文