Appearance
二级指针
c
#include <stdio.h>
2
3 int main(){
4 int a = 10;
5 int *p = &a;
6 int **pp = &p;
7 printf(" a: %d\n", a);
8 printf(" *p: %d\n", *p);
9 printf("**pp: %d\n", **pp);
10 puts("");
11
12 printf(" &a: %p a: %d\n", &a, a);
13 printf(" &p: %p p: %p\n", &p, p);
14 printf("&pp: %p pp: %p\n", &pp, pp);
15 puts("");
16 return 0;
17
18 }
result:
a: 10
*p: 10
**pp: 10
&a: 0x7ffcfd66e2f4 a: 10
&p: 0x7ffcfd66e2f8 p: 0x7ffcfd66e2f4
&pp: 0x7ffcfd66e300 pp: 0x7ffcfd66e2f8
作用
指针变量的值
C
1 #include <stdio.h>
2
3 int a = 10;
4 int b = 20;
5
6 void change3(int **pp)
7 {
8 *pp = &b;//把指针指向b
9 }
10
11 int main(void){
12 int *p = NULL;
13 p = &a;
14 printf("p = %d\n", *p);
15 change3(&p);
16 printf("*p = %d\n", *p);
17 return 0;
18 }
result:
p = 10
*p = 20
指针数组传参
实参 | 可以匹配的参数 |
---|---|
int a[5] | int a[] int *p |
int *a[5] | int *a[] int **p |
int a[3] [5] | int a[] [5] int (*a)[5] |
二级指针和指针数组
C
1 #include <stdio.h>
2
3 char *season[4] = {"Spring", "Summer", "Autumn", "Winter"};
4
5 void array_print(char *a[], int len)
6 {
7 int i;
8 for(i = 0; i<len ; i++)
9 {
10 printf("%s\n", a[i]);
11 }
12 }
13 void array_print2(char **a, int len)
14 {
15 int i;
16 for(i=0; i<len ; i++)
17 printf("%s\n", a[i]);
18 }
19
20 int main(void)
21 {
22 array_print(season, 4);
23 puts("");
24 array_print2(season, 4);
25 return 0;
26 }
27
28
result:
Spring
Summer
Autumn
Winter
Spring
Summer
Autumn
Winter
操作二维数组
二级指针和二维数组
- *二维数组b[3][5]的指针指向的还是一个一维数组b[3],每个一元素的长度为5, 是一维数组int (p)[5]类型
c
1 #include <stdio.h>
2
3 int b[3][5]={
4 1, 2, 3, 4, 5,
5 6, 7, 8, 9, 0,
6 2, 2, 2, 2, 2
7 };
8
9 int main(void){
10 int i, j;
11 int (*p)[5];
12 p = b;
13 for(i = 0; i<3 ; i++)
14 {
15 for(j = 0; j< 5; j++)
16 printf("%d ", p[i][j]);
17 puts("");
18 }
19 return 0;
20 }
result:
1 2 3 4 5
6 7 8 9 0
2 2 2 2 2
- 二级指针操作二维数组
C
1 #include <stdio.h>
2
3 int a[3][5] = {
4 1, 2, 3, 4, 5,
5 6, 7, 8, 9, 0,
6 2, 2, 2, 2, 2
7 };
8
9 int main(void){
10 int i, j;
11 int (*p)[5];
12 p = a;
13 int (**pp)[5];
14 pp = &p;
15 for(i = 0; i<3 ; i++)
16 {
17 for(j = 0;j<5;j++)
18 printf("%d ", (*pp)[i][j]);
19 puts("");
20 }
21 return 0;
22 }
- 一级指针操作二位数组
C
1 #include <stdio.h>
2
3 int a[3][5] = {
4 1, 2, 3, 4, 5,
5 6, 7, 8, 9, 0,
6 2, 2, 2, 2, 2
7 };
8
9 int main(void){
10 int i, j;
11 int *pt = a[0];//一级指针只能指向一个地址, 所以等价于pt = &a[0][0]
12 for(i = 0; i<3 ; i++)
13 {
14 for(j=0;j<5;j++)
15 printf("%d ", *(pt +i*5 + j));
16 printf("\n");
17 }
18 return 0;
19 }