初识指针


  1. 指针就是一个值为内存地址的变量(或数据对象)。
  2. 数组名是数组首元素的地址。也就是说,如果a是一个数组,那么下面的语句成立:a==a[0];

    a和a[0]都表示数组首元素的内存地址。

  3.在C中,指针加1指的是增加一个存储单元。对于指针而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。

  4.在指针面前使用*运算符可以得到该指针所指向对象的值。

  5.指针加1,指针的值递增它所指向类型的大小(以字节为单位)。

  6.在数组中,a[i]与*(a+i)相同。

   int *a形式和int a[]形式都表示a是一个指向int的指针。但int a[]只能用于声明形式参数。

   下面四种函数原型是相同的:

    int  sun(int *a);

    int  sun(int *);

    int  sun(int a[ ]);

    int  sun(int [ ]);  

   7.地址应该和指针类型兼容。如不能把double类型的地址赋给int的指针,至少要避免不明智的类型转换。

   8.计算两个指针的差值。求差的两个指针分别指向同一个数组的不同元素,通过计算求出两元素之间的距离。差值的单位与数组类型的单位相同。

      注意:可以利用关系运算符比较两个指针的值,但前提是两个指针都指向相同类型的对象。

      如两个int类型的指针相减的值为2,则两个指针所指的两个元素相隔两个int。

   9.指针和多维数组。如果a是一个int类型的二维数组,则

    a                   --二维数组首元素的地址(每个元素都是内含两个int类型元素的一维数组)

    a+2              --二维数组的第三个元素(即一维数组)的地址

    *(a+2)      --二维数组第三个元素的首元素(一个int类型的值)地址