二级好题积累:选择题
二级好题集(持续更新)
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的博客!



