个人对于static和extern的区分看法

        对于static和extern在全局变量和局部变量中的混合使用,我个人感觉还是比较有意思的,因为这个问题在老师上课讲的时候我感觉好特么难啊。为什么这个变,到下一个模块里面又不变了,好绕啊,弄得我都不知道这个程序怎么执行的,所以在下来自己经过调试和计算找到了一点方法,算出来了。
#include <stdio.h>
#include <stdlib.h>

int count = 3;
int main()
{
	int i, sum, count = 2;
	for(i = 0, sum = 0; i < count; i += 2, count++)//第一次循环,i = 2 count = 2;第二次循环,i= 2,count = 3;
	{
		static int count = 4; //第一次循环,在循环里面,count运行一次 就是局部变量count = 4;
		count++;  //    在for循环下面,第一次循环, count = 5;第二次循环,count = 6;①
		if(i % 2 == 0)// 在if循环里面开始新的计算数据;
		{  
			extern int count;//第一次循环,声明全局变量 在这count = 3;
			count++;//第一次循环,count= 4;第二次循环,count = 5;②
			sum += count;//第一次循环, sum1 = 4;第二次循环, sum3 = sum2 + count =14; count 每次循环用②里面的值;
		}   // 在if函数内部计算用的都是函数里面的数值 
		sum += count;//第一次循环,退出if循环后count = 5,所以sum2= 9;第二次循环,sum4 = sum3 + count = 20;count每次循环都是用①里面的值
	}//  for循环里面的计算数值是用for{}里面的值,但是不包括内部新的代码块的值
	printf("%d %d\n",count,sum);
	system("pause");

}

  可以看到的是对于上面这个程序来说,我刚刚看到的时候感觉这么多的count那个对应的是那个,搞得循环好像要好多次一样,自己都一脸懵逼的样子。

  对于全局变量在if函数模块里面的声明只是调用了他的值而已,他自己本身还是在if语句里面出来的是局部变量上面的static也一样,他们都是局部变量,所以模块里面的变量和外部的for循环里面的并没有什么关系,只是凑巧他们都名字一样罢了;

对于static是静态变量,存储在静态存储空间,所以在函数结束以后不会进行清空而会一直保留在内存中,和动态变量不一样,动态在函数结束以后就会被清空;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值