【问题标题】:Understanding C arrays and pointers理解 C 数组和指针
【发布时间】:2015-02-12 10:10:57
【问题描述】:

需要一点帮助来理解这段代码 sn-p 中到底发生了什么。 当我运行程序时,它会打印 7。

#include <stdio.h>
int main() {
int a[] = {1,2,3,4,5,6,7,8,9};
int b[] = {1,2,3,4,5,6,7,8,9};
int c = 5;
int *p = a;
printf("--> %d", (c[b])[p]);
return 0;
}

当谈到 printf 语句中的 (c[b])[p] 部分时,我有点困惑。 任何帮助/解释将不胜感激。

【问题讨论】:

标签: c arrays pointers printf


【解决方案1】:

这样写有点奇怪,但是 C 中的 [] 运算符是可交换的。那就是说(c[b])[p]p[b[c]]是一样的,这样更容易理解:

p[b[c]] = p[b[5]] = p[6] = a[6] = 7

对原始表达式做同样的事情也可以,只是有些地方看起来有点奇怪:

(c[b])[p] = (5[b])[p] = (b[5])[p]) = 6[p] = p[6] = a[6] = 7

[] 的可交换性(如果那是一个词)只是由于它的定义——即a[b]*(a + b) 相同,在这里可以看到ab 的顺序没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多