本文目錄一覽:
C語言中賦值語句的語法是怎樣的
賦值的語法規則就是:
數據類型 變數名 = 表達式
表達式可以理解為一個值或一個計算公式就行,表達式加一個英文符號分號就是語句。
例如:
我們今天要用到的,我買了幾斤蘋果。
就可以這樣寫:
方式一:
Int apple_count = 0; //告訴計算機apple_count是用來存買蘋果的斤數的,默認為0;
方式二:
Int apple_count; //告訴計算機apple_count是用來存買蘋果的斤數的,以後再告訴計算機它等於多少,現在不知道;
擴展資料
1、C語言中,賦值運算的操作是有方向的,即將右側表達式的值(也稱為右值)賦值左側的變數,只能是標識一個特定存儲單元的變數名。
2、由於變數名只能出現在賦值運算符的左邊,因此它也被稱為左值;由於常量只能出現在賦值運算符的右邊,因此它也被稱為右值。左值可以用作右值,但右值不能用作左值。
在C語言中的各種賦值是如何轉換的?
關於賦值操作,你可以查看一下博客的內容,初學者不用理解底層彙編的實現機制,有點晦澀,隨著自己的進步可以進一步的深入底層查看其實現原理
1 代碼案例
iint main()
{
int n,m;
char ch;
float f = 12.12;
double d=121.111;
n = f; //單精度浮點賦值給整數
m =d; //雙精度浮點賦值給整數
ch = n; //整數賦值給字元值
ch = f; //浮點賦值給字元值
f = d; //整數變數賦值給浮點變數;
return 0;
}
2 以上代碼調試運行對應的彙編代碼分析
101: float f = 12.12; //單精度浮點賦值:佔用4個位元組,需要1條彙編指令實現
源代碼對應1條彙編指令:
00401C78 mov dword ptr [ebp-10h],4141EB85h
102: double d=121.111; //雙精度浮點賦值:佔用8個位元組,需要2條彙編指令實現
源代碼對應2條彙編指令:
00401C7F mov dword ptr [ebp-18h],9FBE76C9h
00401C86 mov dword ptr [ebp-14h],405E471Ah
103: n = f; //單精度浮點賦值給整數
源代碼對應3條彙編指令:
00401C8D fld dword ptr [ebp-10h]
00401C90 call __ftol (004232cc)
00401C95 mov dword ptr [ebp-4],eax
104: m =d; //雙精度浮點賦值給整數
源代碼對應3條彙編指令:實際的類型轉換通過調用內部C運行時介面函數__ftol來實現類型轉換。
00401C98 fld qword ptr [ebp-18h]
00401C9B call __ftol (004232cc) //調用__ftol函數(對應15條彙編指令,見下面3描述)
00401CA0 mov dword ptr [ebp-8],eax
105: ch = n; //整數賦值給字元值
源代碼對應2條彙編指令:
00401CA3 mov al,byte ptr [ebp-4]
00401CA6 mov byte ptr [ebp-0Ch],al
106: ch = f; //浮點賦值給字元值
源代碼對應3條彙編指令:
00401CA9 fld dword ptr [ebp-10h]
00401CAC call __ftol (004232cc)
00401CB1 mov byte ptr [ebp-0Ch],al
107: f = d; // 整數轉換為浮點數,源代碼對應2條彙編指令:
00401CB4 fld qword ptr [ebp-18h]
00401CB7 fstp dword ptr [ebp-10h]
3 賦值涉及的__ftol函數對應的彙編指令:
__ftol 函數對應以下16條指令:
004232CC push ebp
004232CD mov ebp,esp
004232CF add esp,0F4h
004232D2 wait
004232D3 fnstcw word ptr [ebp-2]
004232D6 wait
004232D7 mov ax,word ptr [ebp-2]
004232DB or ah,0Ch
004232DE mov word ptr [ebp-4],ax
004232E2 fldcw word ptr [ebp-4]
004232E5 fistp qword ptr [ebp-0Ch]
004232E8 fldcw word ptr [ebp-2]
004232EB mov eax,dword ptr [ebp-0Ch]
004232EE mov edx,dword ptr [ebp-8]
004232F1 leave
004232F2 ret
4 C運行庫(Run-Time Library)存在的原因
4.1 定義(摘自《軟體調試》,張銀奎)
當編譯器在將高級語言編譯到第幾語言的過程是,因為高級語言中的某些比較負責的運算符(如不同的類型轉換)要對應比較多的低級語言指令(如彙編、機器指 令),為了防止這樣的指令段多次重複出現在目標代碼中(造成目標碼過大),編譯器通常將這些指令段封裝為函數,然後將高級語言的某些操作翻譯為函數調用。
C標準定義了標準C函數,C++標準定義了C++標準類庫,這些庫通常被稱為支持庫,這些庫是程序編譯運行的必要條件,因此支持庫也稱為運行庫(Run-Time Library).
VC提供了C和C++運行庫。
4.2 例子
1)如上面例子,VC編譯器通常將 n =f( n :整數,f:浮點數)這樣的賦值編譯為調用__ftol函數;
2)VC編譯器也將new ,delete 操作符編譯為對malloc和free函數調用(可以通過單步調試運行,反彙編單步跟著call 指令觀察分析驗證!)
5 總結
1)通過以上分析,不同類型變數轉換,是編譯程序在編譯程序過程中,將操作轉換編譯成調用運行庫函數來實現的。
2)一般程序設計過程中,不是必要情況下,不要頻繁使用不同類型互相轉換的操作,特別是涉及到循環運算、性能的優化的程序!
c語言賦值是替換的意思么?
我覺得可以這樣理解啊,比如你聲明一個a,系統會隨機分配一個值給a,直到你給a賦了值,你賦的值就會替換掉a原來的值,此時a就等於你所賦的值。
C語言交換變數值的幾種方法
方法一:三變數交換。
#includestdio.h
int main(void)
{
int a,b;
scanf(“%d%d”,a,b);
int t=a;a=b;b=t;
printf(“%d %d\n”,a,b);
return 0;
}
方法二:加減交換
#includestdio.h
int main(void)
{
int a,b;
scanf(“%d%d”,a,b);
a=a+b;
b=a-b;
a=a-b;
printf(“%d %d\n”,a,b);
return 0;
}
方法三:異或交換
#includestdio.h
int main(void)
{
int a,b;
scanf(“%d%d”,a,b);
a=a^b;b=b^a;a=a^b;//可寫成a^=b^=a^=b;
printf(“%d %d\n”,a,b);
return 0;
}
方法四(黑盒測試下):不交換
#includestdio.h
int main(void)
{
int a,b;
scanf(“%d%d”,a,b);
printf(“%d %d\n”,b,a);
return 0;
}
C語言交換語句的賦值問題
當然不變,程序中定義的任何變數都是有值的,即使你說的T沒賦值,程序也會在初始化得時候給它一個隨機賦值,賦值只是將目標變數的值拷貝給當前變數,所以目標變數的值是不會發生改變的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/199228.html