2017-01-29 4 views
-3

は、strcmp関数では、引数としてポインタ*s*tをとるが、forループでは、条件として*はs [i]と等価ですか? K & R Cの106ページ

s[i]==t[i]  

を指定します。

ジャスト機能文が s[i]代わりの *sを使用することができ、したがって、同義である
*(s+i) and s[i] 

として、配列のために、確認したいですか?

+1

:それは取りません」ポインタ '* s'と' * t' "ではなく、ポインタ' s'と 't'を取ります。 –

+1

'[]'ポーラーを簡単に検索するとこれに答えました。質問をする前に、あなた自身に解決しようとしてください。そして 's 'は' s [i] 'と同じであるべきです(' i'がゼロでない限り)? – Olaf

+1

はい、有効なポインタ*または配列* 's'とインデックス' i'の式 '*(s + i)'は 's [i]'と等しくなります。これは、 '* s'が' s(i) 'と同じであることを意味します。' i'がゼロであれば***( '* s'は' *(s + 0) 'と同じです's [0]'とします)。 –

答えて

4

は配列オブジェクトの要素の添字指定である。[]角括弧内の式が続く後のfi X式C標準(6.5.2.1配列は添字)

2から添え字演算子[]の定義は、E1 [E2]が (*((E1)+(E2))と同じであるということです)。 バイナリ+演算子に適用される変換規則のために、E1が配列オブジェクト(同等の場合、配列オブジェクトの最初の要素へのポインタ )で、E2が整数の場合、E1 [E2]はE2- E1の第1要素(0から数えて)。

したがって

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"); 
関連する問題