C语言静态变量定义时赋初值和不赋初值

#include<stdio.h>main(){//intk;for(intk=0;k<3;k++){staticintx=3;//这个语句是否只在第一次循环中运行?pr... #include <stdio.h>
main()
{
//int k;
for(int k=0;k<3;k++)
{
static int x=3; //这个语句是否只在第一次循环中运行?

printf("%d",x++);
}
printf("\n");
for(int k=0;k<3;k++)
{
static int x; //这个语句是否只在第一次循环中运行?
x=3; //这里是不是每次循环都起作用,为什么?
printf("%d",x++);
}
}
static int x;是不是就相当于static int x=0;
还有一问题:n=1;n+++n---n为什么是1?这不是与(n++)+(n--)-n一样吗?
展开
 我来答
3_C_3
2011-03-28 · TA获得超过206个赞
知道答主
回答量:76
采纳率:0%
帮助的人:44.4万
展开全部
239: m=n+++n---n;
00401047 mov eax,dword ptr [ebp-4](1)
0040104A mov dword ptr [ebp-8],eax(2)
0040104D mov ecx,dword ptr [ebp-4](3)
00401050 sub ecx,1 (4)
00401053 mov dword ptr [ebp-4],ecx (5)
00401056 mov edx,dword ptr [ebp-4] (6)
00401059 add edx,1 (7)
0040105C mov dword ptr [ebp-4],edx (8)
从上面可以看出来(1)(2)是计算m=n+n-n的,(4)(5)(6)是计算n--的,(6)(7)(8)是计算n++的,这也符合++、--是从右到左的运算规则。
m=(n++)+(n--)-n;
0040102F mov eax,dword ptr [ebp-4]
00401032 mov dword ptr [ebp-8],eax
00401035 mov ecx,dword ptr [ebp-4]
00401038 sub ecx,1
0040103B mov dword ptr [ebp-4],ecx
0040103E mov edx,dword ptr [ebp-4]
00401041 add edx,1
00401044 mov dword ptr [ebp-4],edx
两者对比下就知道了,加了两个括号是等价的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhaoyuxiyan
2011-03-28 · TA获得超过474个赞
知道答主
回答量:64
采纳率:0%
帮助的人:47.5万
展开全部
#include <stdio.h>
main()
{
//int k; (该句被注释掉了)
for(int k=0;k<3;k++)
{
static int x=3; //这个语句是否只在第一次循环中运行?(仅在本次循环中运行)

printf("%d",x++);
}
printf("\n");
for(int k=0;k<3;k++)(该句出错,已定义过一个k的变量,应改为for(k=0;k<3;k++),k从定义开始在整个main函数中有效)
{
static int x; //这个语句是否只在第一次循环中运行?(仅在本次循环中运行,且x默认值为0)
x=3; //这里是不是每次循环都起作用,为什么?(c语言语句执行时,在main函数中从上而下依次执行,因此该句共执行3次)
printf("%d",x++);
}
两者相当;
n=1;n+++n---n=(n++)+(n--)-n=1+1-1;
因为n++,n--是在该句(定义int k; k=n+++n---n;)执行后执行,n的值才改变
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
9162449
推荐于2017-12-16 · 超过18用户采纳过TA的回答
知道答主
回答量:66
采纳率:0%
帮助的人:58.3万
展开全部
static 是初始化~注意初始化和赋值是不一样的~~
赋值语句重复执行多次`在一个程序中,而变量只初始化一次.
而static静态变量作用域是可以覆盖到每个块的.(可以把每次的循环体看做一个小块)

//static int x;是不是就相当于static int x=0;
//还有一问题:n=1;n+++n---n为什么是1?这不是与(n++)+(n--)-n一样吗?

这个虑一遍过程.读到第一个操作数n,继续读右面操作符,最先组成操作符的为一个操作符~~那么一个'+'就是一个操作符,后面的++是前自增.后面的以此类推.
不过这种问题不必过于纠缠.现实中代码写成这样的人,不是脑障碍就是脑残疾
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dingsanxun
2011-03-28 · TA获得超过904个赞
知道答主
回答量:132
采纳率:0%
帮助的人:63.8万
展开全部
你的补充问题我来回答下:
static定义的全局变量在没有赋值时默认是0 正确
下面一个问题建议你查:算术符号优先级
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式