
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
两者对比下就知道了,加了两个括号是等价的
符合要求!static变量只在函数内部可见,存在于程序运行的全过程
普通局部变量在函数运行结束便被释放所以,这里的static_var会每次输出不同的结果,var却每次都是0;
主要是1、2题哇???那我就开工了,直接输入的,没经过编译,自己查一下错。
第一题:
#define MAX 0
#define MIN 1
float fun(float a[],float maxmin[])
{int i;
float average,s=0;
maxmin[MAX]=maxmin[MIN]=a[0];
for(i=0;i<N;i++)
{s+=a[i];
if(a[i]>maxmin[MAX])maxmin[MAX]=a[i];
if(a[i]<=maxmin[MIN])maxmin[MIN]=a[i];
}
average=s/N;
return average;
}//返回的是平均分,主函数定义一个数组maxmin[2]存放最高分和最低分
第二题:
e好像n久前做过一次,找找
哈哈,拿分拿分!!
#include<mathh>
#include<stdioh>
float avxue(float (p)[4],int n)
{int i;
float s=0,average;
for(i=0;i<4;i++)
s+=((p+n)+i);
average=s/4;
return(average);
}
float avke(float (p)[4],int n)
{float s=0,average;
int i;
for(i=0;i<4;i++)
s+=((p+i)+n);
average=s/4;
return(average);
}
notpass(char name[],float (p)[4])
{int i,j,k,s,y=0;
float q;
printf("\n\nThe one who did not pass twice :\n");
for(i=0;i<4;i++)
{q=(p+i);s=0;
for(j=0;j<4;j++)
if(((p+i)+j)<60)s+=1;
if(s>=2)
{y=1;
printf("%-8s ",name[i]);
for(k=0;k<4;k++)
printf("%42f ",(q+k));
printf("\n");
}
}
if(y==0)printf("none!!");
}
good(char name[],float (p)[4])
{int i,j,k,s,x,y=0;
float q;
printf("\n\nThe one whose average >90 or whose all >85:\n");
for(i=0;i<4;i++)
{q=(p+i);s=0;x=0;
for(j=0;j<4;j++)
{s+=((p+i)+j);
if(((p+i)+j)>=85)x+=1; }
if((s>=360)||(x==4))
{y=1;
printf("%-8s ",name[i]);
for(k=0;k<4;k++)
printf("%42f ",(q+k));
printf("\n");
}
}
if(y==0)printf("none!!");
}
main()
{float a[4][4]={{88,92,94,72},{99,89,88,100},{68,48,57,71},{86,87,88,97}};
float (p)[4];
int i,j;
float average[4],average_k[4];
float s=0;
char kecheng[]={"Math","Chinese","English","C++","average"};
char name[]={"Smith","Billy","Bill","Tom"};
sqrt(0);
p=a;
for(i=0;i<4;i++)
{average[i]=avxue(p,i);
average_k[i]=avke(p,i);
}
printf("\t");
for(i=0;i<5;i++)
printf("%-8s",kecheng[i]);
printf("\n\n");
for(i=0;i<4;i++)
{printf("%-8s",name[i]);
for(j=0;j<4;j++)
printf("%-82f",((p+i)+j));
printf("%-52f\n",average[i]);
printf("\n\n");
}
printf("average ");
for(i=0;i<4;i++)
printf("%-82f",average_k[i]);
notpass(name,p);
good(name,p);
getch();
printf("\n\nplz change the parameters yourself!and site my answer be the best answer!thx!\npress any key to exit!");
}
static不是允许修改,你估计和const搞混了,static表示静态存储,直到整个程序结束变量值才会从存储区释放,静态变量又分为全局静态变量和局部静态变量,
全局变量与全局静态变量的区别:
(a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。
(b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。
(c)具有外部链接的静态;可以在所有源文件里调用;除了本文件,其他文件可以通过extern的方式引用;
静态全局变量的作用:
(a)不必担心其它源文件使用相同变量名,彼此相互独立。
(b)在某源文件中定义的静态全局变量不能被其他源文件使用或修改。
(c) 只能在本文件中使用!具有内部链接的静态;不允许在其他文件里调用;
静态局部变量和作用域和局部变量一样,不过生存周期不一样,局部变量在定义局部变量的函数调用完之后就从内存中释放其值,而静态局部变量不释放,等整个程序全部执行结束后才会从内存中释放。
现在的社会是一个高速发展的信息化时代,尤其是各种软件出现在我们的生活里面,带来更快的节奏发展,而这些软件都是通过编程语言来编写的,最基础的语言自然也是c语言,更是无数程序员入门的语言,其中关于字符串常量很多人很是疑惑C语言static 加在字符数组中才能得到正确的字符串,什么原理?其实就是静态资源,可以作为常理,自然也就是字符串了,我们来具体分析一下吧。
首先要知道c语言是面向过程的语言,它很多地方并不像java,c++等优秀,尤其是字符串这里,没有这个类型,而是通过字符数组来实现字符串的效果,也就是通过一组容器来存储多个数字达到字符串的效果,但是仅仅只是字符串数目并非真正意义上的字符串,字符串在任何语言里面这是静态资源,甚至可以说是常量池里面的东西,所以c语言想要实现真正意义上的字符串,必须static 加在字符数组前面。
当然每一门语言都是不一样的,比如java就可以直接string或者stringbuff进行定义,不过两者也有很大的区别,比如string是final所修饰,这是不可更改的,因此每次新建元素都是开辟一个新的空间,而stringbuff并不会,自己带有数组缓冲区,所以自然不会新建一个空间,只要字符串一样就可以。
在这里也比较推荐大家,如果想要入门程序员行业的话,完全可以选择c语言作为基础先学一段时间,有编程语言一定的理解后,就可以直接开始java语言等面向对象的语言学习了。
c语言中静态变量作常量使用,用于存储常数。可用const,constant或final等关键字标识,其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区。
对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。
扩展资料:
在函数内以static声明的静态局部变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同。
一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放,且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。
以上就是关于C语言静态变量定义时赋初值和不赋初值全部的内容,包括:C语言静态变量定义时赋初值和不赋初值、C语言问题,要求是学习static定义静态变量的用法,请问下面这个程序符合要求吗,谢谢、C语言的,帮我编一下.谢谢了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)