2015-03-23 3 views
0

Я вижу ниже фрагмент кода всегда возвращает 1 вместо 4 Не в состоянии действительно понять, что это неправильноУказатель arthmetic путаница

#include <stdio.h> 
int main(void) { 
    int a[4] = {1,2,3,4}; 
    int *p = a; 

    p++; 
    printf("%ld\n",(long int)(p-a)); 
    return 0; 
} 
+0

Если вы назначаете a, который указывает на первый элемент указателю p, то приращение p указывает на 2, и если вы снова вычитаете a из него, вы вернетесь к 1?! – Rizier123

+0

Что вы ожидали? * Р = а; р ++; p-a; .. –

+0

почему вы ожидаете 4? – jev

ответ

4

Это основы арифметики указателей. Если у вас есть:

int a[4] = {0}; 
int *p = a; 

когда вы p++ - компилятор автоматически увеличивает p четыре байта (в случае, если размер целого числа четыре). То же самое происходит с вычитанием, если вы вычтите 1 от p, компилятор автоматически вычтет четыре байта. Но для более точного ответа на ваш вопрос кажется Оператор - при применении к типам указателей делит результат на размер типа элемента, на который указывает указатель .

Смежные вопросы