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