2012-04-01 19 views
2

可能性の重複:
Pointer Arithmetic In Cアレイアドレス減算

コード:我々は差を考慮した場合の出力は、両方のために3 3が来るのはなぜ

int main() 
{ 
    int a[ ] ={0,1,2,3,4}; 
    char c[ ] = {'s','a','n','j','u'}; 
    printf("%d\n",&a[3]-&a[0]); 
    printf("%d\n",&c[3]-&c[0]); 
    return 0; 
} 

彼らは両方のために異なるでしょうか?

+0

そして...これのポイントは何ですか?あなたは本当に何を質問していますか? –

答えて

3

ポインタ演算では、差をバイト単位で返しますが、ポインタの型は2つのポインタの間で返します。だから、

a[3]a[0]int秒の差がc[3]c[0]char秒の違いと同じですので、 - あなたはどちらも同じ結果を得ます。

ポインタの減算動作のための算術演算のようなものです:

type* p1 = ... 
type* p2 = ... 
p1 - p2 == (((int)p1) - (int(p2)))/sizeof(type)