【问题标题】:Tricks to analyse pointer and pointer-to-pointer structures in C?在 C 中分析指针和指针到指针结构的技巧?
【发布时间】:2019-11-29 01:14:19
【问题描述】:

鉴于以下代码,是否有解决它或任何类似指针问题的技巧(图表、图表或一些更简单的分步说明)?
我的意思是我已经知道答案了,只是我计算的时间太长了。

static int data[] = {0,1,2,3,4}
int*p[] = {data,data+1,data+2,data+3,data+4};
int**ptr=p;
ptr++;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
*ptr++;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
*++ptr;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);
++*ptr;
printf("\n %d %d %d",ptr-p, *ptr-data, **ptr);

【问题讨论】:

  • 令人困惑的是您将 data[] 设为静态。你忘记了分号。
  • 这里有一个技巧:编译代码,通过调试器逐步运行它,并观察所有涉及的变量。比盯着代码用笔和纸做笔记快大约 100 倍。
  • 如果你在面试呢哈哈?

标签: c pointers


【解决方案1】:

我最喜欢的技巧是使用笔和纸。
为变量绘制矩形,为指针绘制箭头。
从 variable-rectangle 绘制箭头,这是指向它所指向的矩形的指针变量。

它在 ASCII 艺术中不像在纸上那样直观,但看起来有点像这样。

data [ 0 ][ 1 ][ 2 ][ 3 ][ 4 ]
       ^    ^    ^    ^   ^^
       |    |    |    |.../|     ("..." meaning chronologically progressing,
       |    |    |    |  / |            though this one is the fourth step)
       |    |    |    | /  |
p    [ | ][ | ][ | ][ |/][ | ]

       ^    ^    ^    ^ 
       |... |... |... |             (here are the first three steps)
      ptr

请注意,ptr 从不指向 p 中的索引 4,而是索引 3 中的指针递增,因此它指向数据的索引 4。 (诚​​然,我并没有真正深入到那个细节,我的问题集中在技巧上,而不是在你的代码上执行它的结果。我可能误读了故意难以阅读的运算符用法......)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2020-08-19
    • 2018-05-16
    • 1970-01-01
    • 2011-11-20
    • 2015-07-10
    • 2013-02-15
    • 2023-04-04
    相关资源
    最近更新 更多