c语言指针赋值德问题

看一下注释,为什么不能,max=x,min=x,只要是这样就会输出垃圾数据
最新回答
飞花逐水流

2025-06-18 03:47:21

请注意,函数的参数变量,是函数在执行时刻临时申请的变量,这与在函数体中申请的临时变量一样,函数运行中可用,但函数执行return后将会被舍弃。函数调用inv(a,10,&max,&min);就是将数组a的首地址取出来赋值给临时变量x,10赋值给n,(主程序中的变量)max的地址赋值给(参数临时变量)max,(主程序中的变量)min的地址赋值给(参数临时变量)min。

由于参数的临时性,去直接修改参数变量的值,无法实现将修改后的值返回给调用者,只能利用指针型变量的特点来实现:将它指向的变量(这个被指向的变量可以是调用者的变量)的值进行修改,相当于我们改变的是门牌号中的住户而非去修改门牌号。

另外:*max=x; 是将x的值取出赋值给max指向的变量,这个指向的变量是main函数中的max,而max=x;是将x的值取出赋值给临时变量max,本来max中存放的是主函数中max变量的地址,因此这个地址会被x的值冲掉,关键你的本意并不是这样的。

追问
那x不是已经被赋予主函数中a【】数组的地址了吗,现在把他给子函数的max不行吗
追答
关键是主程序赋值给参数变量max的是指向主程序中max变量地址,也希望将最大值赋值给主程序中max变量,max=x的赋值后,这个目标无法实现了。
追问
是不是max=x后进行后面的代码后读取的是max是保存了形参x的地址,而不是主函数的地址,所以返回后给的是x,而不是主函数的max,是这样吗
追答
可以给,但程序运行完毕无法实现将最大和最小值赋值给主程序中的max和min变量
有杀气的萝莉

2025-06-18 16:36:00

在子函数中: max和min是指针变量, x[0]是int变量, 你把int变量赋值给指针变量, 单从类型上来说就不正确

max和min所指向的内存单元才可以看作是一个int变量, 获取这个所指向的内存单元, 形式为*max 或 *min

追问
意思是int x【】是整形变量不是数组是吗
意思是int x【】是整形变量不是数组是吗
追答
定义: int x[10];
变量x是数组, 如果确定到该数组中的某一个元素, 则是int, 如:x[5] 则可以看作int变量
失约

2025-06-18 04:33:34

以上代码中,inv函数的形参max和min是整型指针变量,也就是说max和min中记录的是内存地址值;
max=x或min=x都是修改内存地址值,并没有对地址下存储内容进行修改,也就是说,用max=x和min=x不能对main函数中max和min变量的内容进行修改,max和min未经赋值,输出就是乱码。
追问
那不是后面就修改了吗,后面的代码不是交换了顺序了吗
追答
什么修改不修改的?你的表达能力让人头大。。。你是没搞清楚*max和max,函数形参和函数实参的意义和区别吧,再回去看看书,稍微有点概念再来追问,好吧!
追问
*max是里面的地址所对应的值,不是可以max=x吗,x不就是数组吗
*max是里面的地址所对应的值,不是可以max=x吗,x不就是数组吗
*max是里面的地址所对应的值,不是可以max=x吗,x不就是数组吗
*max是里面的地址所对应的值,不是可以max=x吗,x不就是数组吗
追答
x不是数组,x是数组的首地址
孤独儛埗

2025-06-18 12:41:43

min,max是参数,是指向int型的指针(指向main函数中的min,max变量),是栈上的临时变量,
min=x,max=x是将临时变量min和max指向一维数组,这时操作*max或者*min是实际操作的是一维数组的第一个元素。
而main中的min,max由于没有初始化,为了性能考虑保留了改地址以前的值,所以看起来像乱码
︸世态炎凉

2025-06-18 06:13:14

因为类型不匹配。形参表中规定,max 和 min 都是int * 类型的。所以,要保存x的值,就必须用*max=x;