指针和引用

指针是内存地址,指针变量是用来存放内存地址的变量,指向内存的一个存储单元。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h> 

int main() {
int a = 10;
int *p1;
int **p2;

p1 = &a; // 指针 p1 指向 a
p2 = &p1; // 指针 p2 指向指针 p1,即 p2 的内容为 p1 的地址

printf("%d\n", *p1); // 10
printf("%d\n", **p2); // 10
}

注:定义指针时,* 两边的空格可以选择,int* ptrint *ptr int*ptr 意义一样,另外,int 整型,int* 表示指向「整型」的指针,int** 表示指向「指向整型的指针」的指针。

指针与引用的区别:指针指向一块内存,它的内容是所指内存的地址,而引用是某块内存的别名。

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main() {
int a = 1;
int *p = &a;
printf("%p\n", &p); // 0x7ff7b2a82920
printf("%p %p\n", p, &a); // 0x7ff7b2a82928 0x7ff7b2a82928
printf("%d\n", *p); // 1
return 0;
}
1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main() {
int a = 1;
int &b = a;
printf("%p %p\n", &a, &b); // 0x7ff7b2e77928 0x7ff7b2e77928
printf("%d\n", b); // 1
return 0;
}

注意:由于 C 不支持引用传递,上述代码需以 C++ 编译运行。