1.总结指针

1.内存四区:
  堆区:系统自动开辟,自动释放
  堆区:程序员主动开辟主动释放
  全局区:全局静态变量
  代码区:保存代码
  2.地址
  地址的具体含义为,例如小明住在21栋5楼东户那么小明,这个地址为一个地址,而这个地址 里东西为值地址有以下特性,唯一,地址也是一种数据。
  首地址:为一个存储序列的第一个地址
  3.指针变量:

#include <stdio.h>
  main()
  {
  int a = 111;
  int *p =&a;
  printf("a的值%d\n",a);
  printf("a的地址的值%d\n",&a);
  printf("指针变量pa的值%d\n",p);
  printf("pa指向的值%d\n",*p);
  }

作用:存储地址。
  定义一个指针: int p=NULL; //其中q是一个变量,不要把p看做一个整体;其实p就是一个int* 的变量,可以这样看 数据类型变量名,星号只能说明这里是一个指针变量。
  野指针:定义一个指针没有指向任何的地址,在指针进行初始化时一定要赋值。
  4.指针的引用:
  指针变量自己的值:p;
  指针变量指向的值:
pa
  5.空指针:不确定类型的指针 void *
   malloc(4)//开辟四个字节那么这个四个字节存放什么的?可以使 int unsigned int floa t型
  void可与强制转换为其他任意的类型
   (int*)malloc(4)
  (float*)malloc(4)
  (char(*)[4]) malloc(4)
   如果给一个房子需要放东西,那么怎么把东西放到进去,按四个字节 还是一个字节放,申请四个字节不一定是把这个内存占满,大的可以装小的小的不可以装大的
  6.指针的运算
   指针的运算其实就是地址的偏移,两个地址之间的运算是没有任何意义的
就有这些运算 ++ -- + - 这几种格式

#include <stdio.h>
main()
{

    char a ;
    char *pa = &a;
    int b;
    int *pb=&b;
    int c[10];
    int(*pc)[10] = &c;

    printf("pa=%d\tpa+1=%d\n",pa,pa+1);
    printf("pb=%d\tpb+1=%d\n",pb,pb+1);
    printf("pc=%d\tpc+1=%d\n",pc,pc+1);

}


pa=1637199      pa+1=1637200
pb=1637172      pb+1=1637176
pc=1637112      pc+1=1637152
请按任意键继续. . .

7.一维数组与指针
&a是指向整个数组的指针
a是数组名:[数组名是这个数组的首地址]
int p1=a;
int(
pa)[5] = &a;//数组指针

a指向数组的第一个存储单元 a[0]

访问数组元素
数组名:
*(a+m) //a[m]

8.二维数组与指针
arr[m][n] = (*(arr+m)+n)

推荐阅读更多精彩内容