2012-04-01 3 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

그리고 : 포인터 빼기 연산에 대한

를 arithmetics 뭔가처럼? 당신은 * 정말로 * 묻고있는 질문은 무엇입니까? –

답변

3

포인터 연산에서 뺄셈은 바이트가 아닌 포인터의 두 포인터 사이의 차이를 반환합니다.

그래서, a[3]a[0] 사이 int의 차이 때문에 c[3]c[0] 사이 char의 차이와 동일합니다 - 당신은 모두 같은 결과를 얻을. 이 점은 무엇인가 ...

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