C++ (二)字串與指標
阿新 • • 發佈:2018-12-31
-
字串與指標
- 一般情況下,除了對字串陣列定義時初始化外,不能直接將字串賦值給陣列。
char s[30]; s = "good news";//錯誤
- 可以採用strcpy()函式對字串陣列賦值
char s[30]; strcpy(s, "Good News!"); //賦值
-
指標陣列賦值
char *p; p = "good news"//給字元型陣列賦值
注意:不能通過指標修改p的值,因為該字串是常量,所有常量都被放在特殊的儲存區內無法修該。
- 可以通過指標賦值來實現字串交換
int a[3]; //指標每次加1,跳轉指標對應型別的步數 a+1 地址+4//因為a指向a[0],為int變數 *(&a)+1 效果同上 &a+1 地址+16//因為&a指向整個陣列,為4*int變數 a / *(&a) / &a //這三個指標都指向a[0]變數的首地址 //但是&a的含義不同
-
二維陣列
-
一個數組名如果不出現在“&”後面 —— 則陣列名是 “指向陣列首元素的指標”
-
一個數組名如果出現在“&”後面 —— 則陣列名返回 “指向陣列的指標”
-
int a[3][3];//二維陣列 &a 表示指向整個二維陣列的指標 a 表示指向第一個小陣列a[0]的指標 a[0] 表示指向第一個小陣列的第一個元素a[0][0]的指標 a[0][0] 表示a[0][0]地址裡的內容 a = &a[0] a[0] = &a[0][0] a[0] = *a a[0][0] = **a
int a[3][3] = {1,2,3,4,5,6,7,8,9}; int (*p)[3];//定義一個指向“包含四個int型別元素的一維陣列”的指標 int i,j; p = a;//a和p的基型別相同,都是指向“包含四個int型別元素的一維陣列”的指標 //下面“=”表示相當於 *(*(p+i)+j) = a[i][j] = p[i][j] p+i = &a[i] *(p+i) = a[i] *(p+i)+j = &a[i][j]
-
“&” 和“*”
- “&” —— 上升一級
- “*” —— 下降一級
指標指向的是儲存單元的內容,即變數,而不是變數的值(*p可以代表變數,對變數進行賦值)
int a[];
int *pointer;
pointer = &c;
pointer+i = a+i = &a[i]
*(pointer+i) = *(a+i) = a[i]
pointer[i] = *(poiner+1)= a[i]