2015-12-01 4 views
-3

Что такое доступное значение *p1 после использования procd3?Подумайте, какое правильное решение. Указатели

void procd3(int *pt1, int *pt2){ 
    int *pt3; 
    pt3 = pt1; 
    pt1 = pt2; 
    *pt1= *pt3 + 1; 
} 

    void main(){ 
    int va; 
    int *p1, *p2; 
    … 
    p1=(int *)malloc(sizeof(int)); 
    p2=(int *)malloc(sizeof(int)); 
    *p1=3; 
    … 
    *p2= *p1 + 2; 
    … 
    procd3(p1,p2); 
    … 
} 

Я думаю, что ответ 4. Поскольку *p1=3 в начале и *p2=*p1+2=5. Поэтому, когда функция получает вызов pt3=3, то pt1=5 и, наконец, *pt1=3+1=4.

+2

Звучит как домашнее задание. Вы приложили усилия, чтобы решить эту проблему самостоятельно? –

+0

Sheesh, или даже просто запустить его сами и посмотреть? – Brian

+0

@Louis Вы можете 'printf' протестировать его, знаете ли. –

ответ

1

Для наглядности, давайте предположим, что malloc возвращает 0x1000 и 0x1004 для p1 и p2. Поэтому, когда вы звоните: procd3, pt1изначально 0x1000 и pt2 исходит из 0x1004.

Первое, что происходит, вы присвоить значение pt1 для pt3, то присвоить значение pt2 к pt1, что дает нам следующее:

pt3 == 0x1000 == p1 
pt1 == 0x1004 == p2 

*pt3 == *p1 == 3 

Теперь вы уступка

*pt1 = *pt3 + 1; 

Но помните, что pt1 указывает на то, что p2 - 0x1004. На память, на которые указывает p1, не влияет. Поэтому после вызова функции *p1 по-прежнему 3.

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