首页 > C/C++ > C语言中p[j]和j[p]

C语言中p[j]和j[p]

2018年8月30日 发表评论 阅读评论

首页我们来看一段有关C语言指针相关的代码,代码不是很规范,但是可以表明问题。

#include <stdio.h>

int main() {
    char *p;
    int i=1;
    p = &i;
    *(p+1) = 2;
    p[2] = 3;
    for (int j = 0; j < 3; ++j) {
        printf("p[%d]: %d \n", j, p[j]);
        printf("%d[p]: %d \n", j, j[p]);
    }
    return 0;
}

那么这里”p[j]”和”j[p]”数据结果会一样吗?

是的,他们的结果完全一样,下面是上面代码的运行结果。

p[0]: 1 
0[p]: 1 
p[1]: 2 
1[p]: 2 
p[2]: 3 
2[p]: 3 

大多数的C语言书籍里面,都会把p[j]说成数组p中的第j个元素,虽然这种说法也没有错,其实p[j]等价于*(p+j)的。这也是我上面示例中赋值时使用2中方法的原因。“加法运算可以交换顺序,所以将*(p + i)写成*(i + p) 也是可以的。同理,将p[i]写成i[p]也是可以的(可能你会不相信,但这样写既不会出错,也能正常运行)。摘录来自: 川合秀实. “30天自制操作系统”。

分类: C/C++ 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.