例一(基本指针)
#include <stdio.h>
int main()
{
int * p; //int * 是变量名p的类型,表示存放int类型的地址
int i = 1;
p = &i; // p保存了i的地址, p就指向i
*p = *p + 1; // p指向i, *p 就是i,所有出现*p的地方都可以替换成i, 反之亦然
i++;
printf("i=%d,*p=%d", i, *p);
return 0;
}
注意:
- p不是i, i不是p
- 若p 指向了 一个普通变量
*p 就是这个普通变量
- *p 最准确的解释:
以p的内容为地址的变量 ,在C++中是解引用的操作,通过P来操纵i这块内存
例二(指针和一维数组)
#include <stdio.h>
void f(int * array, int len);
int main()
{
int a[6] = {1, 2, 3, 4, 5, 6};
f(a, 6); //a == &a[0](即第一个元素的地址)
printf("%d", a[4]); //a[4] == *(a + 4) == array[4] == *(array + 4)
return 0;
}
void f(int * array, int len) //array和a同时指向a[0],即array == a
{
array[4] = 66; //等于修改了a[4] 的值
printf("%d", a[4]);
}
例三(多级指针)
#include <stdio.h>
//搞懂注释多级指针就差不多了
int main()
{
int i = 10;
int * p = &i;
int ** q = &p;
int *** r = &q; // *r == q 以r的内容为地址的变量
// **r == *q == p
// ***r == *p == i
printf("%d", ***r);
return 0;
}
注:
1 .
i是int类型,&i是int*类型
p 是int*类型,&p是int**类型
q 是int**类型,&q是int***类型
r 是int***类型,&r是int****类型
2 .
int * p: p存放int 类型的地址
int ** q: q存放int * 类型的地址
int *** r: r存放int ** 类型的地址