【變數與記憶體位址】 變數(Variable)提供一個有名稱的記憶體儲存空間。一個變數包含資料型態、變數本身的值及它的位址值。 變數資料型態決定了變數所分配到的記憶體大小;變數本身的值是指儲存於記憶體中的資料內容;而您可以透過變數名稱取得這個資料內容,又稱為 rvalue或 read value;而變數的位址值則是指變數所分配到的記憶體之位置,又稱為lvalue或 location value。 如果您想知道變數的記憶體位址為何,您可以使用&運算子,&是「取址運算子」(Address-of operator),它可以取出變數的記憶體位址,例如: #include <iostream> using namespace std; int main() { int var = 10; cout << "變數var的值:" << var << endl; cout << "變數var的記憶體位址:" << &var << endl; system("pause"); return 0; }
【指標 Pointer】 一般變數可以直接對所分配到的記憶體空間作存取;而指標則提供了間接存取,指標可指向特定的記憶體位址,而不直接操作變數或物件,要宣告一個指標,使用以下的語法: type *ptr; 其中type是指標的資料型態,每一個指標都有一個相對應的型態,用以指出所指向的資料或物件之資料型態有所不同,編譯器根據指標型態來確定特定記憶體位址上的資料如何解釋,以及如何進行指標運算(Pointer arithmetic),以下是幾個指標宣告的範例: int *iptr; double *dptr; char *cptr;
【變數與指標的存取】 #include <iostream> using namespace std; int main() { int main() { int var = 10; int *ptr = &var ; cout << "變數var的位址:" << &var << endl; cout << "指標ptr指向的位址:" << ptr << endl; cout << "指標ptr儲存的值:" << ptr << endl; cout << "取出ptr指向的記憶體位置之值:" << *ptr << endl; system("pause"); return 0; } 可以改為: int *ptr; ptr = &var; 但不能寫成:int *ptr = var;
【變數與指標的存取】 //pointer03.cpp #include <iostream> using namespace std; int main() { int var = 10; int *ptr = &var ; cout << "var = " << var << endl; cout << "*ptr = " << *ptr << endl; *ptr = 20; system("pause"); return 0; }
【指標的運算】 //pointer04.cpp #include <iostream> using namespace std; int main() { int *iptr = 0; cout << "iptr位置:" << iptr << endl; cout << "iptr+1:" << iptr+1 << endl; cout << "iptr+2:" << iptr+2 << endl; double *dptr = 0; cout << "dptr位置:" << dptr << endl; cout << "dptr+1:" << dptr+1 << endl; cout << "dptr+2:" << dptr+2 << endl; system("pause"); return 0; }
【指標與陣列】 在宣告一個陣列之後,陣列名稱用來參考至陣列的第一個元素的記憶體位址,例如在下面的程式中可發現,陣列arr與&arr[0]所指向的位置是相同的: #include <iostream> using namespace std; int main() { int arr[10] = {0}; cout << "arr :\t" << arr << endl; cout << "&arr[0]:" << &arr[0] << endl; system("pause"); return 0; }
【指標與陣列】 //指標與陣列存取資料的方式 point06.cpp #include <iostream> using namespace std; int main() { const int length = 3; int arr[length] = {30, 40, 50}; int *ptr = arr; for(int i = 0; i < length; i++) // 以指標方式存取資料 cout << "*(ptr+" << i << "): " << *(ptr+i) << endl; for(int i = 0; i < length; i++) // 以陣列方式存取資料 cout << "arr[" << i << "]: " << arr[i] << endl; system("pause"); return 0; }
【 C 語言的標準輸出一】 1.標準輸出指令 printf("格式字串", var1, var2, …); 2.跳脫字元(Escape Sequence) 註:d 代表某個數值。 \n 換行 \" 雙引號 \f 換頁 \' 單引號 \t 跳格 \/ 斜線 \b 倒退 \\ 反斜線 \d* ASCII 碼 (8 進位) \x ASCII 碼 (16 進位) 例子 執行結果 printf("\tThe line begins with tab.\n"); This line begins with tab. printf("It\'s a \"C Tutorial\".\n"); It's a "C Tutorial". printf("This is backslash: \\.\n"); This is backslash: \. printf("\\101 is \101.\n"); \101 is A. printf("\\x41 is \x41.\n"); \x41 is A.
【 C 語言的標準輸出二】 3.修飾子 -:向左靠齊 +:印出正負號 %c:字元 %s:字串 %d:十進位整數 %f:浮點數 (小數點型式) %l:長整數,加在 d、u…之前 %u:無號十進位整數 %e:浮點數 (指數 e 型式) 資料 格式 結果 12345 %10d %+d +12345 %-10d % d %010d 0000012345 123.456 %7.2f 123.46 %010.3f 000123.456 %+10.4f +123.4560
【 C 語言的標準輸入】 1.標準輸入指令 scanf("格式化字串", &var1, &var2, …); 2.輸入格式 &是位址運算子 字元陣列不需要加上&位址運算子 2.輸入格式 %d:十進位整數 → int %f:浮點數 → float, double %c:字元 → char %s:字串 → 字元陣列 例子 結果 int num1, num2; printf("Enter 2 numbers: "); scanf("%d,%d",&num1,&num2); 執行畫面: Enter 2 numbers: 輸入值格式: 103,227
【zerojudge 練習】 a007 判斷質數 a811 2. 迷路小鴨 a233 排序法~~~ 挑戰極限 d255 11417 - GCD b080 A. 畢氏定理 b035 D. 海加爾山之戰
To be Continue… 回目錄頁