1. 程式人生 > >Coursera課程筆記----C程式設計進階----Week 5

Coursera課程筆記----C程式設計進階----Week 5

##指標(二) (Week 5) ### 字串與指標 * 指向陣列的指標 * int a[10]; int *p; p = a; * 指向字串的指標 * 指向字串的指標變數 * char a[10]; char *p; p = a; ```C++ int main() { int a = 5; int *pa = &a; int b[6] = {1,2,3,4,5,6}; int *pb = b; char c[6] = {'h','e','l','l','o','\0'}; char *pc = c; cout<(c)<(pc)< using namespace std; int main() { char buffer[10] = "ABC"; char *pc; pc = "hello";//學習指標之前,我們無法直接賦值,只能在定義的時候這樣直接賦值 cout< using namespace std; int main() { int a[4] = {1,3,5,7}; cout << a << endl; //a[0]的地址,a為指向陣列首元素的指標(基型別為int) cout << a + 1 << endl;//a[1]的地址 cout << &a << endl;//a[0]的地址,但相當於指向整個陣列的指標(基型別為int[4]) cout << &a + 1 << endl;//a[3]之後的地址(越界了) cout << *(&a) << endl;//*E,E若為指標,*E將返回E指向的內容,所以返回a[0]的地址,和列印a的結果相同 cout << *(&a)+1 << endl;//a[1]的地址 return 0; } ``` * 陣列名相當於指向陣列的第一個元素的指標 * 若a是指向陣列的第一個元素的指標,即a相當於&a[0] * &a是“指向陣列”的指標, &a+1將跨越16個位元組 * **&a**相當於**管轄範圍“上升”**了一級 * \*a是陣列的第一個元素a[0],即\*a等價於a[0] * ***a**相當於**管轄範圍“下降”**了一級 #### 指向二維陣列的指標 * 二維陣列的定義 * 二維陣列a[3]\[4]包含3個元素:a[0],a[1],a[2] * 每個元素都是一個“包含4個整形元素”的陣列 * 二維陣列的第一個元素是a[0] * a[0]是一個“包含4個整型元素”的一維陣列 * a為指向a[0]這個一維陣列的指標 * a[0]為指向第一個元素a[0]\[0]的指標 * 管轄範圍排序:&a>a>a[0]>a[0]\[0](連指標都不是,只是個量) * a = &a[0] * a[0] = &a[0]\[0] * a[0] = *a * a[0]\[0] = **a * 三條規律 * 陣列名相當於指向陣列第一個元素的指標 * &E相當於E⬆️ * *E相當於E⬇️ ```C++ int main() { int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; cout<<" a ="< using namespace std; int main() { int n = 0; cin >> n; for (int i = 0; i < n; i++) { int a,b; cin >> a >> b; int matrix[101][101]; int summer = 0; for (int j = 0; j < a; j++) { for (int k = 0; k < b; k++) { cin >> matrix[j][k]; if(j == 0 || j == a-1 || k == 0 || k == b-1) summer += matrix[j][k]; } } cout << summer << endl; } return 0; } ``` #### Quiz2 二維陣列右上左下遍歷 ```C++ #include using namespace std; int main() { int row, col; cin >> row >> col; int shuzu[100][100]; for (int j = 0; j < row; j++) { for (int o = 0; o < col; o++) { cin >> shuzu[j][o]; } }//row 行 col 列 int k = col + row - 1;//共有(行數+列數-1)條對角線 for (int i = 0; i <= k; ++i) {//對每一條對角線進行處理 cout<<"i = "<
= 0 && r < row && c < col && c >= 0) {//通過這個,找到在範圍內的。 cout << *(*(shuzu + r) + c) << endl;//只打印在範圍內的 } c--;//因為是由右邊到左邊,所以C-- } } return 0; } //要想象到"畫面外的虛線" ``` #### Quiz3 文字排版 ```C++ #include using namespace std; int main() { int n; cin >> n; string text; int flag = 80; for (int i = 0; i < n; i++) { string temp; cin >> temp; if(flag > temp.length()) { text = text.append(temp); text = text.append(" "); flag -= (temp.length()+1); } else if (flag == temp.length()){ text = text.append(temp); text = text.append("\n"); flag = 80; } else{ text = text.append("\n"); flag = 80; text = text.append(temp); text = text.append(" "); flag -= (temp.length()+1); } } cout<