指针

1.指针地址

2.首地址

 

3.指针

int a = 10;
int *p = &a;//p指向a
printf("%p\n",p);//打印p的地址
printf("%d",*p)//打印a的值

4.指针的定义

int *p;

定义指针的诀窍:

    int age = 18;
    int *page = &age;
    *page = 20;
   char c = 'A';
   int *pc = &c;
   printf("\n%c",*pc);

5.指针的大小

指针的大小不会随着指针指向的数据类型的变化而变化

6.指针的运算

    int a = 10;
    int b = 20;
    int *p = &a;
    int *q = &b;
    printf("%d\n",p-q);//20-10=10

7.野指针

    int *p;
    scanf_s("%d",p);

8.空指针

    int *p = NULL;

9.万能指针

    int a = 10;
    void *p = &a;
    printf("%d",*(int *)p);//强制类型转换

10.二级指针

    数据类型 **指针变量名 = &一级指针变量名;

11.const修饰指针

  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。