1.指向單個變數的指標;
1 int a = 5; 2 int* p = &a; 3 printf("%d", *p);
2.陣列的指標
(1)一維陣列的指標
1 int a[5] = { 1,2,3,4,5 }; 2 int *p; 3 p = a; 4 printf("%d\n", a[1]); 5 printf("%d\n", *(p + 1)); 6 printf("%d", p[1]);
(2)二維陣列的指標
(1)列指標
1 int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; 2 int* p; 3 //p = &a[0][0]; 4 //p = a[0]; 5 p = *a; 6 printf("%d\n", *(p + 4 * 2 + 3)); //a[i][j] = *(p + i * n + j); //n陣列的列數 7 printf("%d", a[2][3]);
(2)行指標 (指向陣列的指標)
1 int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; 2 int(*p)[4]; 3 p = a; 4 printf("%d\n", a[2][3]); 5 printf("%d", *(*(p + 2) + 3));
3.指向函式的指標
1 int main() 2 { 3 int func(int a); 4 int (*p)(int a); 5 int a = 5; 6 p = func; 7 (*p)(a); //呼叫 8 return 1; 9 } 10 int func(int a) 11 { 12 printf("%d", a); 13 return 1; 14 }
4.指向指標的指標(有時候在想前面的*是不是可以無限寫下去……)
1 int a = 5; 2 int* p1, ** p2, *** p3; 3 p1 = &a; 4 p2 = &p1; 5 p3 = &p2; 6 printf("%d", ***p3);
5.指標陣列
1 char* p[3] = { "hello", " ", "world" }; 2 printf("%s", *(p + 2));
6.返回指標值的函式
1 int main() 2 { 3 char* myStrcat(char* p1, char* p2); 4 char str[100] = "hello "; 5 char* mes = "world"; 6 printf("%s\n", myStrcat(str, mes)); 7 return 1; 8 } 9 char* myStrcat(char* p1, char* p2) 10 { 11 char* start = p1; 12 while (*p1 != '\0') 13 { 14 p1++; 15 } 16 while (*p1++ = *p2++) 17 {} 18 return start; 19 }
7.檔案指標
FILE *fp;
這裡用詞不太嚴謹。根據《c語言程式設計(第三版)》,指標是一個地址,而指標變數是存放地址的變數。“指標”和“指標變數”是不同的概念。
然而大多數情況下,都將“指標變數”直接稱為“指標”。這裡除了第二點,第六點外,”指標“都是指”指標變數“。