在K& RC的第106页,在strcmp
函数中,它将指针*s
和*t
作为参数,但在for
循环中,它指定
s[i]==t[i]
作为一个条件。
只想确认数组为
*(s+i) and s[i]
是同义词,因此,函数语句可以使用s[i]
而不是*s
吗?
答案 0 :(得分:4)
来自C标准(6.5.2.1数组下标)
2 post fi x表达式后跟方括号[]中的表达式 是数组对象元素的下标。该 下标运算符[]的定义是E1 [E2]与...相同 (*((E1)+(E2)))。由于适用于的转换规则 binary +运算符,如果E1是数组对象(等效于指针 到数组对象的初始元素),E2是一个整数, E1 [E2]表示E1的第E2个元素(从零开始计数)。
因此
a[i]
相当于*( a + i )
,相当于i[a]
例如
int a[1] = { 10 };
printf( "a[0] == *( a + 0 ) is %s\n", a[0] == *( a + 0 ) ? "true" : "false" );
printf( "a[0] == 0[a] is %s\n", a[0] == 0[a] ? "true" : "false" );