注册 登录
编程论坛 C语言论坛

二级指针

善丑恶 发布于 2021-04-08 16:35, 1655 次点击
程序补完题: 主函数已给出,请完成子函数change,使主函数中的指针max指向较大变量,指针min指向较小变量。但变量a和b的值不改变。

输入要求:
输入两个整数,用空格分隔。

输出要求:


数据示例1:
输入:
17 28
输出:
max=28,min=17
a=17,b=28



//补充部分
int main(){
    int a,b;
    int *max=&a, *min=&b;
    scanf("%d%d",&a,&b);
   
    change(&max,&min);
   
    printf("max=%d,min=%d\n",*max,*min);
    printf("a=%d,b=%d\n",a,b);
    return 0;
}
7 回复
#2
rjsp2021-04-08 16:51
程序代码:
void change( int** pmax, int** pmin )
{
    if( **pmax < **pmin )
    {
        int* tmp = *pmax;
        *pmax = *pmin;
        *pmin = tmp;
    }
}


[此贴子已经被作者于2021-4-12 08:58编辑过]

#3
善丑恶2021-04-10 13:54
回复 2楼 rjsp
能讲讲这是怎么理解的吗,二级指针不太理解
#4
善丑恶2021-04-11 15:32
回复 2楼 rjsp
const int** restrict pmax, const int** restrict pmin
这个为什么要这样子定义呢
#5
rjsp2021-04-12 08:58
回复 3楼 善丑恶
首先,一级指针你能不能理解?
对于 TYPE max, min; 假如你想根据大小交换它俩的值怎么办?
void change( TYPE* pmax, TYPE* pmin )
{
    if( *pmax < *pmin )
    {
        TYPE tmp = *pmax;
        *pmax = *pmin;
        *pmin = tmp;
    }
}
int main( void )
{
    TYPE max=……, min=……;
    change( &max, &min );
}

对于你的题目而言,
你要交换的 max/min 的类型是 int*,也就是 TYPE 是 int*;
你要比较的不是 *pmax/*pmax,而是 *pmax/*pmax 所指向的值,也就是要比较的是 **pmax/**pmax。
所以,将上面的代码中 TYPE 换成 int*, if( *pmax < *pmin ) 换成 if( **pmax < **pmin ) 就行了,即
void change( int** pmax, int** pmin )
{
    if( **pmax < **pmin )
    {
        int* tmp = *pmax;
        *pmax = *pmin;
        *pmin = tmp;
    }
}
#6
rjsp2021-04-12 08:59
回复 4楼 善丑恶
在这里没用,我删掉了
#7
善丑恶2021-04-12 09:56
回复 6楼 rjsp
const int** restrict pmax,
那之前用了contst和restrict是什么意思
#8
rjsp2021-04-12 10:40
回复 7楼 善丑恶
const 表示不需要去修改它;如果不加 const 那就表示它必须具有可被更改的能力,即便你不去修改它。
restrict 表示是唯一引用,不会有别人也引用它。否则编译器就要假定更改了一个会导致无关的别人也被连带给更改了。

https://zh.
https://zh.
#9
自由而无用2021-08-09 20:51
typedef int* ptr;
void swap(ptr *x, ptr *y);
1