* s相当于s [i]?

时间:2017-01-29 12:57:55

标签: c arrays pointers

在K& RC的第106页,在strcmp函数中,它将指针*s*t作为参数,但在for循环中,它指定

s[i]==t[i]     

作为一个条件。

只想确认数组为

*(s+i) and s[i] 

是同义词,因此,函数语句可以使用s[i]而不是*s吗?

1 个答案:

答案 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" );