zoukankan      html  css  js  c++  java
  • 指向指针的指针

     1 # define A 10
     2 int main(void)
     3 {
     4     int a[5] = {1, 2, 3, 4, 5};
     5     int b = 2;
     6     int *p = &a[0];
     7     int *q = &b;
     8     int **r = &p;
     9     char *x[] = {"about","of"};
    10 
    11     printf("%s ", *x);
    12 
    13 
    14     printf("%d ", A);
    15     printf("%d ", *p);
    16     printf("%d ", *q);
    17     printf("%d ", **r);
    18     printf("%d ", *r);
    19     printf("%d ", p);
    20     printf("%d ", r);
    21 
    22     return 0;
    23 }

        当用一维数组通过指针的形式定义一个数组时,如果我们不通过*x[++i]的形式来使指针移动,那么只能使用指向指针的指针来将指针移动,使其能够指向下一个地址,所以在这里我们可以通过定义如下指针:char **a = x,此时*a就是一个定义为指向指针x的指针,其指向的是x[]首地址,那么要输出of只需要*++a,打印即可。

        我们有定义int *y,因此实用*y,而这里定义了**y,但是依然使用的是y,这个应该是告诉编译器,接下来要使用一个指向指针的指针结构,虽然使用的是*y,但是它已经指向另一个指针了,编译器也有相关显示:

       

        这里再补充一个知识点,如果定义了i,j作为数组参数使用我们针对二维数组还可以用*(*(y+i)+j)形式调用,知识点在二维数组介绍的地方,由于y位置是二维数组开始位置,+i、+j对应指向行列,可用来打印相应字符。

  • 相关阅读:
    java中==和equels的区别
    synchronized的用法及原理
    分库分表之Mycat实现
    Mysql架构和索引及性能优化
    Java内存模型与反向代理服务器Nginx
    Spring基础知识
    使用和理解线程池
    知识补充(数据库优化、三大范式)
    最大子数组问题,分治法求解
    Mybatis学习笔记
  • 原文地址:https://www.cnblogs.com/orangeJuice/p/5882248.html
Copyright © 2011-2022 走看看