关于C指针

时间:2022-07-19 08:34:33

    地址概念:内存基本单元是一个字节,一个字节8个位。在定义变量的时候,如int a=10;系统为变量a分配2个字节空间:1000~1001,并在1001~1002中存有数据10。内存中没有变量a,只有1000~1001这个地址,所以使用a的时候,拿出这个地址中的值就行了。

    寻址方式:分两种

      1、直接寻址:

      如printf("%d",a);系统找到1000~1001这个地址,取出其中存的值。

      2、间接寻址(指针):

      在一个新的地址2010~2011中存放a的起始地址1000,使用a的时候,在2010中取出a的地址1000,再从1000中取出a的值。

关于C指针  

    指针类型:

      1、变量指针:

      就是一个变量的地址,a的指针就是1000。值是地址。

      2、指针变量:

      全名是指向变量的指针变量。一个变量专门用来存放另一个变量的地址(即指针),则这个变量称为指针变量。如定义一个变量ap=2010,则ap就是一个指针变量。

      值是指针。(我们需要理解的是指针变量)

    

    *运算和&运算:

      在定义指针变量的时候需要用到*符号:

        int a;int *ap;

        a=10;ap=&a;//&是取地址运算,将a的地址1000取出,赋值给指针变量

        a=*ap;//*是指针运算符(我理解是取值运算符),先取出a变量存的值1000,再取出地址为1000的值,将这个值赋值给变量a。

      总结:*ap==a;

          &*ap==&a;

          *&a==a;

          (*ap)++==a++;

    指向数组的指针变量:    

      数组的指针就是数组的起始地址;用一个变量来存放一个数组的起始地址,这个变量就是指向数组的指针变量。

      int a[10];int *app;//定义

      app=&a[0];app=a;//赋值,通常用后面一种

关于C指针

        总结:app=a;

           app+i==a+i//就是a[i]的地址

           *(app+i)==*(a+i)//对应的值

           数组指针变量可以带下标,app[i]==*(app+i)