最近在学c语言,讨教下大家
代码如下,最后输入两者都是100,问一下为什么3[i]也是100啊,看不太懂这种表示方式。
#include<stdio.h>
int main()
{
int i[] = {1,2,3,100};
printf(“3[i] = %i\n”,3[i]);
printf(“i[3] = %i\n”,i[3]);
return 0;
}
代码如下,最后输入两者都是100,问一下为什么3[i]也是100啊,看不太懂这种表示方式。
#include<stdio.h>
int main()
{
int i[] = {1,2,3,100};
printf(“3[i] = %i\n”,3[i]);
printf(“i[3] = %i\n”,i[3]);
return 0;
}
解决方案
10
A[B] *(A+B) *(B+A) B[A] //以上四行等价 "abc"[1] *("abc"+1) *(1+"abc") 1["abc"] //以上四行等价 A[0] *(A) 0[A] //以上三行等价
40
看本人的这个帖子你就知道了:http://blog.csdn.net/paschen/article/details/47315449
10
其中有一个是指针,另外一个是数值。如:
char *p = NULL;
char *p1_1 = p + 1;
int *p1_2 = p + 1;
char *p2_1 = 1 + p;
int *p2_2 = 1 + p;
如上,你肯定明白 int 指针的那两行编译不过去的,除非强转。而且,运算结果其实也是和数值相加的那个指针类型是一样的,所以根本不存在歧义。