c语言语句块
Ⅰ c语言中的每条执行语句都需要用分号结束吗
在 C 程序中,分号是语句结束符。每个语句必须以分号结束。它表明一个逻辑实体的结束。
C语言中分号被用作为语句结束的标志,如果在C程序中不小心多写了一个分号,那么该分号也许会被视作一个空语句;或者编译器会因为这个多余的分号而产生一条警告信息,根据警告信息的提示往往会很容易找到多余的分号。
如:
If (x>b);
b=x;
多余的分号会被解释为空语句,实际产生的效果是:
If(x>b){}
b=x;
也就是说当x>b时,执行空语句,在任何情况下会执行b=x。
如果在C程序中漏写了一个分号,就表示当前语句并没有结束,同样会差错。如:
If(n<3)
return
log.date=x[0];
log.time=x[1];
log.code=x[2];
因为return 后漏写了一个分号,表示该语句还没有结束,实际效果相当于:
If(n<3)
return log.date=x[0];
log.time=x[1];
log.code=x[2];
(1)c语言语句块扩展阅读
1、C 语言中的语句块中是可以包含语句块的,语句块中的语句块被当。作一个简单的语句来处理。
2、若要写一个包含几个表达式语句和空语句的语句块,就可以用下面的形式:这是一个语句块的例子,其中包含四个已经了解的语句,依次为赋值表达式语句、空语句、除法运算表达式语句和按位取反表达式语句。
Ⅱ c语言 语句块内 变量
1、
如1L所说,语句printf("%d\n",*a);中引用到的变量a是定义在main开头的:int *a;,这个定义的作用域是定义起到main函数结束,因此不会出错。
关于为什么能取到变量b的值,在下面详细叙述。
2、
这种写法符合C99标准。但不是所有的编译器都符合这一标准。事实上,编译器厂商大多对C99不热衷,目前市面上的编译环境中几乎没有完全符合这一标准的。常用的VC++中,Microsoft C编译器对这方面支持尤其差(VS2010没用过,之前的版本好像都这样),例如还保留了函数内部定义必须在函数开头的限制(当然C++编译器没有这个限制),这甚至不满足ANSI C89(最初的K&R C有此限制,但是C89中被废除了)。注意在Microsft C编译器中不支持语句块内部定义(顺带一提,当年C++标准对语句块内定义有效性的相关规定也遭到过Microsoft等的抵制),函数内局部变量作用域总是从定义到函数结尾,这可能就是LZ问题的原因。
GCC等其它编译器支持得比较好一些。用Dev-C++试验了一下printf("%d\n",b);果然无法通过编译。
另外,如果编译通过,printf("%d\n",*a)是有问题的。由于a=&b;,而b在语句块外部已经无效,a是引用无效对象的野指针。虽然b作为自动变量,在定义时候分配的内存空间在函数调用结束前不会被直接回收,但是之后这些内存可能被其它变量占用,例如在printf("%d\n",*a)这样引用a前在另外的一个语句块内定义了一个自动变量,占用了原本b的空间——这样*a的值事实上等于这个新变量的值,不能保证符合程序的设计意图。2L的代码也非常清楚地说明了这一点。
====
[原创回答团]
Ⅲ C语言中语句块和复合语句的区别
没啥区别,要是深究的话,复合语句可以认为是一个语句块,语句块可以包含多个复合语句
Ⅳ C语言复合语句的使用
当出现语法上某处需要一条语句,但程序却需要执行多条语句时,就可以用到语句块。例如,可以在 if 语句中使用语句块,或者当循环体需要执行多条语句时,也可以使用语句块。
复合语句(compound statement)简称为语句块,它使用大括号把许多语句和声明组合到一起,形成单条语句。语句块与简单的语句不同,语句块不用分号当作结尾。
(4)c语言语句块扩展阅读:
复合语句的结构:
用括号{}括起来组成的一个语句称复合语句。 在程序中应把复合语句看成是单条语句,而不是多条语句,例如:
{
x=y+z;
a=b+c;
printf(“%d%d”,x,a);
}
就是一条复合语句。
复合语句的作用:
1、作为分支和循环的块;
2、作为标识符的作用域。
Ⅳ c语言的语句块作用
C语言中的语句块主要作用是实现作用域的概念。有了作用域的概念,才可以方便命名标识符。比如下面的代码
inta;
intmain()
{
inta;
if(a!=0){inta=2;printf("%d ",a);
return0;
}
源码中使用了3个变量a,如果没有语句块的分隔作用,则必须定义三个不同名字的变量名,如果一个很大的程序中没有语句块,则标识符的命名本身就是一个问题。
Ⅵ C语言的分支语句有哪几种C语言分支结构的基本形式是什么,区别是什么
C语言中的分支结构有三种:
1、单分支结构
单分支结构的基本形式是:
if( <条件表达式> )
{
(语句块)
}
2、双分支结构
双分支结构的基本形式是:
if( <条件表达式> )
{
语句块1;
}
else
{
语句块2;
}
3、多分支结构
多分支结构又分为:“分支结构的嵌套”与“switch语句”
(1)分支结构的嵌套的基本形式是:
if( <条件表达式> )
{
if( <条件表达式> )
{
语句块1
}
else
{
语句块2
}
}
else
{
if( <条件表达式> )
{
语句块3
}
else
{
语句块4
}
}
(2)switch语句
(2)switch语句的基本形式是:
switch(表达式)
{
case 常量1:语句1;break;
case 常量2:语句2;break;
case 常量3:语句3;break;
……
case 常量n:语句n;break;
default : 语句n+1;
}
这三种分支结构的区别在于:
1、单分支结构在满足条件时执行,不满足条件不执行;
2、在双分支结构中,如果条件表达式成立,则执行语句块1,否则,执行语句块2,所以双分支结构至少执行一次;
3、多分支结构的分支结构的嵌套中,分支结构的嵌套包含了单分支结构与双分支结构的特性,可以用单分支结构嵌套双分支结构,也可用双分支结构嵌套单分支结构,通俗的来讲就是分支结构中放入一个分支结构,当条件成立则执行分支结构中嵌套的分支结构;
4、switch语句可以理解成其他的分支结构的总和,switch集成了上述所有分支结构的特性,在有多种情况的时候才使用switch,当switch(条件)满足case 后面的常量,则执行对应的语句,若满足的条件未能匹配到对应的常量,则执行default后的语句,有default的switch语句是至少执行一次的,当然default也可省略不写,这样switch语句也可以一次都不执行。
Ⅶ C语言中if语句的三种形式到底是怎样的分别举例
1)简化形式
if(表达式) 语句块
如: if(x>y) printf(“%d”,x);
2)一般形式
if (表达式)
语句块1
else
语句块2
例如:
if (x>y)
printf(“max=%d”,x);
else
printf(“max=%d”,y);
3)嵌套形式
含义:一条if语句重又包含另一个if语句称为if语句的嵌套.
格式:
if( )
if( ) 语句块1
else 语句块2
else
if( ) 语句块3
else 语句块4
例如:
if (score>90)
printf(“very good”);
else
if(score>80)
printf(“good”);
else
if(score>60)
printf(“ok”);
else
printf(“bad”);
如果语句块包含多个语句,用{}就行了
例如:
if(n>0)
{
printf("%d",n);
printf("是正数\n");
}
Ⅷ C语言 语句块外部的变量默认存储类型 语句块外部那一行 那如果这样声明到底是什么存储类型
register 是寄存器变量。从硬件的角度来说,就是说用的是CPU的内部寄存器,而不是内存。呃~~是这样的,变量存在的地方从物理的角度上有2两个。从使用角度上来说有4个。物理上就是CPU的内部寄存器和内存,从CPU的硬件来说,比如说加法器。只能使用自己的内部寄存器。所以,比如i++这条指令。如果你使用的是寄存器变量,在编译后 就会变成 大概 :
ADD R4, 1, R4 //R4= R4 +1 自增 R4就是i变量
这样一条~
然而如果是在内存里就要
LDR R4, =i_ADDRESS //从内存地址中载入数值进寄存器
ADD R4, 1, R4 //R4 = R4 + 1 自增
STR R4, =i_ADDRESS //将R4中的数据再写回原来的地址里
这就是差别,如果你循环个几千几百次 差距就出来了。
然后,是从编程的意义上来说,变量的地方:寄存器变量,代码区,堆,和栈~
函数的参数,一定会是寄存器变量。当然太多了寄存器不够了那就只能是内存变量了。通常就是R0 R1 R2 R3对应函数的前四个参数。然后就是你显式声明的,就是那个关键字。然后就是靠编译器优化。所以你声明多了也没啥用,寄存器数量有限~
代码区,就是说在编译期就确定要存在的!就是全局变量和static 静态变量,不管你有没有赋初始化值,这些内存和代码一起在编译时就已经确定了。然后是堆栈,通常来说堆和栈是两个东西。一句话说,你的局部变量会在调用函数时在堆上生成!就是说,你在调用第一函数时会在堆栈上为这个函数中的变量分配内存,如果你在第一函数里调用第二函数,那么就会在堆上紧接着的内存继续分配内存,这个时候,称第一函数的变量内存被压栈~当退出第二函数时,这些内存被释放~说白了就是堆指针移动回原来的地方了。
栈是操作系统按一定格式化格式后的内存,malloc()函数申请的匿名内存都是从这来的~我见过有的实时操作系统用的是链表~申请内存的过程就是从链表中移出节点。释放内存的过程就是向链表中插入节点~呃,具体的不说了,太多了~~~
Ⅸ C语言中的块是什么意思
就是两个大括号中间的都可以叫做“块”
Ⅹ 1、 C语言三个循环语句分别是 语句, 语句和 语句
1.for(赋初值;判断条件;循环控制变量增(减)方式){
(循环体)语句块;
}
while(判断条件){
(循环体)语句块;
循环控制变量增(减)值;
}
do{
(循环体)语句块;
循环控制变量增(减)值;
}
while(判断条件)
2、
至少执行一次循环体的循环语句是:
do
while循环语句
3、
循环功能最强的循环语句是:
看情况去,不同的程序用不同的循环,对自己味口的才是最好最强的循环语句。
4、执行以下程序段后,a=10
,b=9
,c=11