指针的概念

1.访问方式:
  1. 直接访问(通过变量直接访问)

  2. 间接访问(将变量a的地址保存在变量b中,通过变量b来访问变量a的地址,最终访问到变量a)

2.指针变量
  1. 指针是一个地址,指针变量就是地址变量,用于存放地址,指针变量的值是地址(即指针)。

  2. 定义方式:

    类型名 *指针变量名;

  3. 指针变量赋值

    • 给指针变量赋值。

      p = &a;
    • 引用指针变量所指的变量。

      a = 10;
      *p = a;
      printf("%d",*p);//输出的是10
    • 引用指针变量的值。

      *p = a;
      printf("%d",p);//输出的是地址
  4. 指针变量最为函数参数

    • 作为一个变量的地址传递到另一个函数中。

      int function(int *p);
      //函数调用时
      n = function(&a);
3.通过指针引用数组。
  1. 数组元素的指针

    //指针p指向数组首元素的地址。
    int a[10];
    int *p;
    p = &a[0];
  2. 在引用数组元素时指针的运算

    • 指针指向数组元素时,可以对指针进行加减运算。

      • 指针变量的加减

        p +(-) 1;//表示加上(减去)一个数组元素所占用的字节数
        int a;
        int *p;
        a = 10;
        *p = a;
        printf("%d",p);//10255024
        printf("%d",p-1)//10255020

    • 如果p的初值为&a[0],则p + i 和 a + i是数组a[i]的地址

      int a[10]={1,3,6,4,8,9};
      int *p;
      p = &a[0];
      printf("%d",(p+3));//6422012
      printf("%d\n",(a+4));//6422016

    • 指针变量p1和p2都指向同一数组,p2-p1的值是地址值之差除以数组元素的的长度。

      int a[10]={1,3,6,4,8,9};
      int *p1,*p2;
      p1 = &a[0];
      p2 = &a[4];
      printf("%d\n",p1);//6421984
      printf("%d\n",p2);//6422000
      printf("%d\n",p2-p1);//4
      ​
      double a[10]={1.0,3.0,6.0,4.0,8.0,9.0};
      double *p1,*p2;
      p1 = &a[0];
      p2 = &a[4];
      printf("%d\n",p1);//6421936
      printf("%d\n",p2);//6421968
      printf("%d\n",p2-p1);//4
  3. 通过指针引用数组元素

    • 下标法

    • 指针法

      int a[10]={1,3,6,4,8,9};
      int *p;
      p = &a[0];
      printf("%d\n",*(p+3));//4
      printf("%d\n",*(a+4));//8
  4. 数组名作函数参数

    • 数组名做参数时,实参数组名将数组首元素地址传递给形参。

    • 变量名与数组名做函数参数的比较

      实参类型

      变量名

      数组名

      形参的类型

      变量名

      数组名或者指针变量

      传递的信息

      变量的值

      实参数组首元素的地址

      通过函数调用是否能改变实参的值

      不能改变实参变量的值

      能改变实参数组的值

  5. 通过指针引用多维数组

    • 多维数组元素的地址。

      int a[3][4] = {{1,3,5,7},{2,4,6,8},{9,10,11,0}};

      a(a+0)代表的是首行(第0行),a+1是第1行.

      表示形式

      含义

      a

      二维数组名,指向一维数组a[0],即0行首地址

      a[0], (a+0), a

      0行0列元素地址

      a+1, &a[1]

      1行首地址

      a[1], *(a+1)

      1行0列元素a[1] [0]的地址

      a[1]+2, *(a+1)+2, &a[1] [2]

      1行2列元素a[1] [2]的地址

      (a[1]+2), (*(a+1)+2), a[1] [2]

      1行2列元素a[1] [2]的值

    • 指向多维数组元素的指针变量。

      • 指向数组元素的指针变量

        p = a[0];//p指向第0行的首列元素。
        ​
        p + 11 == a[2][3];// a[2][3]为数组的第11个元素(从0开始计数)
      • 指向有m个元素组成的一维数组的指针变量

        如果p = &a[0];则p + 1指向a[1],p + 2指向a[2],p的值的变化是以一维数组的长度(按行)为单位。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值