全局变量的应用——C语言

img


计算机二级C语言考试里面的试题,临时变量和全局变量分不清,我记得指针是可以改变值得,还有s和S说的是不是一个东西都是取值吗还是分着取值和指针类型

代码的执行,都是从 main() 函数开始的,从main()函数的第一句开始,按前后顺序,一句执行完,再执行下一句。
在主函数里,调用函数语句:f(&m); 等价于====> f(int *s = &m) ,传参的过程理解为,将int* s 指针指向变量 m 的地址空间。
在函数里,s = &k; 这句修改了指针 s 的指向,将它指向了变量k 的地址空间。(如果将这句注释掉,下面一句改变的就是m的值)
接下来,*s = 7; 是对指针的解引用赋值,此时 s 是指向变量 k 的地址空间,所以*s=7 ===> k = 7;
所以,主函数里最后输出:m = 3, k = 7。

m的值没有变,k的值变为7了
因为函数参数用指针的话,实际上当m的地址传递给函数时,函数内给s复制了一个指针变量,s = &k后,s指向了k的地址,所以*s = 7修改了k的值。

同问

为什么下面还要把M的地址传入f的函数中,直接定义一个指针变量不就行了

这个代码的确有点令人无语,因为函数f的参数根本没用,因为函数开始的时候又重新赋值了s,s和m就没关系了,所以说参数完全是误导人的。