二级好题积累:选择题
二级好题集(持续更新)
25.3.2
关于最大元素的读取

请记住,不要直接硬生生地把这些数字带进去算,要读懂数字代表的什么
比如这道题,**就需要你去把这个函数在干什么读懂:**这个函数是一个关于对数组最大值的选择的函数。
技巧:注意观察:
- 变量增加的先后关系。比如:
- 该函数
p
值首先增加,增加后,若是索引k
的值没有比索引p
的值更大,那么索引k讲变为索引p,注意这里的变化关系! - 即变量变化的先后顺序,先进行比较,后值发生改变。
- 另外,*为什么这里么可以让p直接赋值给初始化后的指针P呢,不应该是把p的地址给p吗,比如:k = &p 解答如下:
&k
是取main
函数中变量k
的地址,传递给fun
函数中的k
。这就使得fun
函数中的指针k
指向了main
函数中的变量k
,也就是说,fun
函数中的*k
和main
函数中的k
代表同一块内存空间,对*k
的操作等同于对main
函数中k
的操作。在
fun
函数的for
循环初始化部分for( p=0, *k=p; p<t; p++ )
中:p
是一个普通的整型变量,在循环初始化时被赋值为0
。*k
表示的是指针k
所指向的内存单元中的值 。由于前面函数调用时fun
函数的指针k
指向了main
函数中的变量k
,所以*k
其实就是main
函数中的k
这个变量。*k = p
这一步,就是把整型变量p
的值赋给main
函数中的k
变量 。因为p
和*k
(即main
函数中的k
)都是整型,所以可以直接进行赋值,而不是把p
的地址赋值过去。
如果写成
*k = &p
,&p
得到的是p
这个变量在内存中的地址,属于int *
类型,而*k
是整型变量,两者类型不匹配,这样的赋值在 C 语言中是不允许的。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dedsec的博客!