C语言中p[j]和j[p]
首页我们来看一段有关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++
近期评论