建设网站文件夹的名字,做a免费视频在线观看网站,房屋中介网站建设方案,重庆安全工程信息网extern和static在C语言里面的作用这里就不做过多的阐述了#xff0c;下面直接通过一个小程序来看一看他们修饰的变量的特性。
#include stdio.hint count 3;int main()
{int i 0, count 2, sum 0;for (i 0; i count; i 2, count){static int count 4;cou…extern和static在C语言里面的作用这里就不做过多的阐述了下面直接通过一个小程序来看一看他们修饰的变量的特性。
#include stdio.hint count 3;int main()
{int i 0, count 2, sum 0;for (i 0; i count; i 2, count){static int count 4;count;if (i % 2 0){extern int count;count;sum count;}sum count;}printf(%d %d\n, sum, count);system(pause);return 0;
} 看到结果有没有很惊讶下面就来通过调试一步步分析出这个结果 那么可以得出此时count是main函数中for循环语句之前定义的局部变量 执行完40行的语句后count变为4说明此时的count为static修饰的count 这儿应该是vs2013的一个bug因为extern修饰的变量必须是具有外部链接属性的也就是上面定义的全局的count那么此时count的值应该为3黄色箭头在第45行说明第44行执行结束要开始执行第45行了为什么我这么说呢 可以看到即使我执行了countcount的值也没有变化 而执行完sumcountsum的值是变成了4而不是5此时是执行到了48行也就是要开始执行第48行所以不要误认为是把第二次sumcount都已经执行了此时的count值变成5也是正确的了因为此时的count是static修饰的countif语句里的extern修饰的count是一个局部变量他的作用域是if语句为什么这么确定看一看接下来sum值得变化就知道了 因为变量具有局部优先性所以这儿的count是static修饰的count而不是全局的count或是for循环之上的count
接下来就很简单了i2此时的count3那么循环还是可以进去再执行一次 此时i4count4二者值相等所以不再进入循环顺序向下执行
所以sum最终为20那么输出sum为20printf输出语句输出的count为4是因为变量具有局部优先性所以这儿的count是for循环上面的局部变量count值为4