變數和常量

2021-07-30 20:25:00 字數 3036 閱讀 5132

2.2.1 變數

其值在其作用域內可以改變的量稱為變數。

變數依據其定義的型別,分為不同型別,如整型變數(int)、字元型變數(char)、浮點型變數(float單精度型,double雙精度型)、指標型變數(*)等。變數的值可以改變,可以被覆蓋、被寫入、被賦值。每個變數必須有乙個名字和他所在的空間繫結。a變數的位址是乙個字串的首位址。

2.2.2變數名和變數值

例如:int a=97; 整型變數a在記憶體中是以97的二進位制存放的,使用時以十進位制形式表現出來

char ch1='a';字元變數ch1的ascii是97,也是以97的二進位制存放的,使用時以字元'a'的形式表現出來

char ch2=(char)a;將整型變數a強制轉化成字元,a的值沒變為97,隻變型別為char

char *p=(char*)a;宣告乙個指標變數p,值可變,它的值是整型變數a強制轉換成了字元指標型別。這個時候p的值還是97的二進位制,只不過是指向字元的位址了。

.整型和位址型別轉換:

int  add=0x12345678;

int   *p=(int*)add;

add是個整型變數,add裡是0x12345678的二進位制數,以十進位制表現出來,p是個整型指標變數名,p裡面是0x12345678的二進位制數,以位址的方式表現出來,代表位址0x12345678。*p是通過*去訪問位址0x12345678這個位址處的資料(如果你試圖去列印它,會出錯,因為這個位址你不一定有許可權去訪問)。&p是取出整型指標變數p的位址,因為p是個變數,它也有自己的位址,所以可以取出它的位址。

(錯誤改正)

char *str = "hello world";

printf("%s\n",str);

*str = "goodbye world";

printf("%s\n",str);

"hello world"是字串常量 不可變

第三行 指標變數裡應該放位址,字串都是以首位址為位址。向乙個位址裡寫入字串應使用strcpy。*str只是代表了str指向的字串中的乙個字元,將字串位址寫入到乙個字元裡肯定是不行的。

2.23區域性變數和全域性變數

1.區域性變數

例如:int  f1(int a)    /函式f1/

a、b、c有效。

注:(1)主函式中定義的變數也只能在主函式中使用,同時主函式中也不能使用其它函式中定義的變數。【主函式和其他函式不可互通變數】

(2)形參變數是屬於被調函式的區域性變數,實參變數是屬於

主調函式

的區域性變數。 【

主函式就是main函式,乙個c程式只有乙個;主調函式是指呼叫其他函式的函式,常常是自定義函式。主函式只能允許當主調函式,不可當被調函式;而主調函式通常還是被調函式。比如main呼叫了自定義函式a,而a又呼叫了函式b,那麼a是main的被調函式,又是b的主調函式。

(3)允許在不同的函式中使用相同的變數名,代表不同的物件,分配不同的單元。

(4)在復合語句中也可定義變數,其作用域只在復合語句範圍內。

例如:int  main()

......

/s,a作用域/

}2.全域性變數

全域性變數也稱外部變數,他是在函式外部定義的變數

例如:int a,b;  /外部變數/      (a,b在f1,fz中可作用)

void f1()  /函式f1/

float x,y;  /外部變數/     (x,y在fz中可作用,f1中不可作用)

int fz()  /函式fz/

int main()  /主函式/

【如果同乙個原始檔中,外部變數與區域性變數同名,則在區域性變數的作用範圍內,外部變數不起作用】

2.3常量

其值不會發生改變的量稱為常量。如整型常量、浮點型常量、字元常量。

常量的值在其作用域內不會發生改變,也不能被賦值在其出現時就被當作乙個

立即數來使用。【一旦宣告了乙個常量,那麼常量所在的記憶體空間就被加上了唯讀的屬性,它有點類似與

const

關鍵字】

【立即數:立即數相當於高階語言中的常量(常數),它是直接出現在指令中的數,不用儲存在暫存器或儲存器中的數,如指令add al,06h中的06h即為立即數。】

【const修飾的資料型別是指常型別,常型別的變數或物件的值是不能被更新的。

const關鍵字的作用主要有以下幾點:

(1)可以定義const常量,具有不可變性。 例如: 

const int max=100; int array[max]; 

(2)便於進行型別檢查,使編譯器對處理內容有更多了解,消除了一些隱患。例如: void f(const int i) 編譯器就會知道i是乙個常量,不允許修改; 

(3)可以避免意義模糊的數字出現,同樣可以很方便地進行引數的調整和修改。

(4)可以保護被修飾的東西,防止意外的修改,增強程式的健壯性。 還是上面的例子,如果在函式體內修改了i,編譯器就會報錯; 例如: 

void f(const int i)  

(5) 為函式過載提供了乙個參考。 

class a //乙個函式 

void f(int i) const //上乙個函式的過載 ...... 

}; (6) 可以節省空間,避免不必要的記憶體分配。 例如: 

#define pi 3.14159 //常量巨集 

const doulbe pi=3.14159; //此時並未將pi放入rom中 ...... 

double i=pi; //此時為pi分配記憶體,以後不再分配! 

double i=pi; //編譯期間進行巨集替換,分配記憶體 

double j=pi; //沒有記憶體分配 

double j=pi; //再進行巨集替換,又一次分配記憶體! 

const定義常量從彙編的角度來看,只是給出了對應的記憶體位址,而不是象#define一樣給出的是立即數,所以,const定義的常量在程式執行過程中只有乙份拷貝,而#define定義的常量在記憶體中有若干個拷貝。 

(7) 提高了效率。 編譯器通常不為普通const常量分配儲存空間,而是將它們儲存在符號表中,這使得它成為乙個編譯期間的常量,沒有了儲存與讀記憶體的操作,使得它的效率也很高。】

變數和常量

package com.xy.pf.test.xiti 關鍵字static 1.靜態方法和靜態變數是屬於某乙個類,而不屬於類的物件 2.靜態方法和靜態變數的引用直接通過類名呼叫 3.在靜態方法中不能呼叫非靜態的方法和引用非靜態的成員變數 反之,則可以 4.可以用類的物件obj來呼叫靜態的方法meth...

常量和變數

常量 固定的資料 四類 整型 浮點型 單精度和雙精度 字元型 字串型 字元型常量 不能是中文,單引號引起來的 字串型常量 雙引號引起來的 變數 表示乙個需要經常改變或者不確定的資料 特點 1.建立了乙個變數相當於在記憶體中占用了一片空間 2.空間的大小是固定的,但裡面的資料可以改變 3.同乙個作用域...

常量和變數

1 常量 vb中常量分為兩種,一種是文字常量,一種是符號常量。1.文字常量 vb的文字常量分為兩種,即字串和數值。1.字串常量 字串常量由字元組成,可以是除雙引號和回車符之外的任何ascii字元。2.數值常量 數值常量共有4重表示方式,即整形數 長整型數 貨幣型數和浮點數。文字常量的四種方式 1.整...