zoukankan      html  css  js  c++  java
  • C语言 指针与数组

    int main()

    {

      int a[5] = {555,444,333,222,111};

      int *p;

      p = &a;            //数组a的首地址 

      p = &a[0];          //数组a首元素的地址

      p = a;               //数组a首元素的首地址

           a = p;           //编译就会报错,因为数组名是个常量,所以不能赋值,所以数组名不能做左值。

      printf("*p = %d ", *p);  //结果都是 *p = 555

           p +=1;    //指针+1;表示指向下一格

           printf("*p = %d ", *p);//结果就是444

    }

    注:

      1、数组名:做右值时,数组名表示数组的首元素首地址,因此可以直接赋值给指针。

                 int a[5];   //而a和&a[0]都表示数组首元素a[0]的首地址;而&a则表示数组的首地址。

      2、数组首元素的首地址和数组的首地址是不同的。前者时数组元素的地址,而后者是数组整体的地址。两者的含义不同,但是数值上是相同的。

    根据上边,我们知道可以用一个指针指向数组的第一个元素,这样就可以用间接访问的方式去逐个访问数组中各个元素,这样访问数组就有了两种方式。

    int a[5]; int *p; p = a; 

    以数组的方式逐个访问: a[0]                 a[1]                 a[2]                  a[3]                  a[4]

    指针的方式逐个访问:    *p                    *(p + 1 )     *(p + 2 )       *(p + 3 )      *(p + 4 )

    注:

      指针本身也是一种变量,因此也可以进行运算。但是因为指针变量本身存的是某个其他变量的地址值,因此该值进行 * / %等运算是没有意义的。指针变量+1代表指针所指向的格子向后挪一格,-1代表指针所指向的格子向前挪一格。

  • 相关阅读:
    bzoj3622: 已经没有什么好害怕的了
    BSGS
    LOJ#2320 生成树计数
    ??? cliquers
    生成函数
    洛谷P5206 数树
    01分数规划
    差分约束系统
    51nod1238 最小公倍数之和 V3
    51nod1237 最大公约数之和 V3
  • 原文地址:https://www.cnblogs.com/jiangtongxue/p/11079446.html
Copyright © 2011-2022 走看看