void fun(int *s, int t, int *k) { int p; for(p=0,*k=p;p<t;p++)//当p-2时,*k的值是_ if (*(s+p) > *(s+*k))//s+p是数组元素的地址还是数组元素的
时间: 2023-02-13 16:48:33 浏览: 78
这是一段代码。它定义了一个函数 fun,接受三个参数:一个 int 类型的指针 s,一个 int 类型的变量 t,以及一个 int 类型的指针 k。
在函数内部,它定义了一个变量 p,然后将 p 的值赋给 *k。接下来,它进入了一个循环,每次循环的条件是 p 小于 t。在循环体内,它会判断 s p 和 s *k 的值的大小。
s p 是数组元素的地址,而不是数组元素的值。s *k 是数组元素的值,而不是地址。
当 p-2 时,*k 的值是未知的,因为我们无法确定 s 数组的内容。
相关问题
优化这段代码 void fun(int *x,int *y){int *p;*p=*x;*x=*y;*y=*p;}
void fun(int *x, int *y) {
int temp = *x;
*x = *y;
*y = temp;
}
// 或者使用指针的指针来交换两个变量的值
void fun(int **x, int **y) {
int *temp = *x;
*x = *y;
*y = temp;
}
程序哪里有错误 fun(int *p1,int *p2) { int *p; *p = *p1; *p1 = *p2; *p2 = *p; }
这个函数`fun(int *p1, int *p2)`存在几个错误和潜在问题:
1. 变量声明与赋值:你试图通过`*p = *p1`来分配指针`p`的值,但实际上`p`是一个未初始化的指针,直接赋值可能会导致不确定的行为。正确的做法是先为`p`指向一个内存位置。
2. 临时变量:你的代码没有明确使用`p`这个临时变量。如果你想交换`p1`和`p2`所指向的值,应该使用指针的解引用操作,而不是将`*p`赋值给它们。
3. 指向不确定的数据:由于`p`没有被初始化,如果它指向的是栈上的临时空间,当函数结束时这些值可能会丢失,除非特别指定它指向堆中的数据。
修复后的代码可能如下所示:
```c
void swap(int **p1, int **p2) {
int temp;
*temp = *(*p1); // 保存p1指向的值
*(*p1) = *(*p2); // 将p2指向的值赋给p1
*(*p2) = temp; // 将保存的值赋给p2
}
```
阅读全文