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.整...