int a = 10;
int *p = &a;//p指向a
printf("%p\n",p);//打印p的地址
printf("%d",*p)//打印a的值
int *p;
定义指针的诀窍:
- 1.先定义变量
- 2.变量名前加*号
- 3.变量名就是指针变量名
- 取地值:&变量名
- 取值:*指针变量名
int age = 18;
int *page = &age;
*page = 20;
- page:保存的是age的首地址,即指向了age所在的内存空间
- *page:取出page指向的内存空间中的值,和直接访问age是一样的
char c = 'A';
int *pc = &c;
printf("\n%c",*pc);
指针的大小不会随着指针指向的数据类型的变化而变化
int a = 10;
int b = 20;
int *p = &a;
int *q = &b;
printf("%d\n",p-q);//20-10=10
int *p;
scanf_s("%d",p);
int *p = NULL;
int a = 10;
void *p = &a;
printf("%d",*(int *)p);//强制类型转换
数据类型 **指针变量名 = &一级指针变量名;
int num = 233;
int *pn = #
*pn = 23333;//修改指向内存的值
pn = NULL; //修改指针指向
Serial.printf("%d %p\n",num,pn);
const int *p3 = #
Serial.printf("%d\n",*p3);//可以读取但不可写
int maye = 7;
p1 = &maye;//指针的指向可以改变
//const int* === int const* 写法是一样的
int *const p2 = #
*p2 = 23333;//可以修改指向内存的值
p2 = NULL;//不可以修改指针指向
p1:指针变量 p1 的值是 0x1000,它存储了 num 的地址。
*p1:通过 p1 解引用,得到 num 的值,即 233。
&p1:p1 指针变量本身的地址。如果 p1 本身存储在内存地址 0x2000 上,那么 &p1 的值就是 0x2000。