2017-01-25 2 views
0
#include <stdio.h> 

int a; 

int main() 
{ 
    int a, b; 
    int *p; 
    b = 8; 
    p = &b; 
    a = 32 + b; 
    p = &a; 
    *p = 32 - b; 
    funct (a, &p); 
    *p = 2; 
    printf ("a=%d b=%d", a, b); 
} 

funct (int x, int **y) 
{ 
    a = 15; 
    **y = x - a; 
    *y = &a; 
} 

Может кто-нибудь сказать мне, почему a равно 9? Я попытался решить эту проблему, но я не могу понять, что это действительно хорошоУказатели и указатели двух указателей

Я попробовал код в code::blocks и, по-видимому a идет от 40 до 24 лет после того, как

`*p=32-b` 

Кроме того, p=&b означает, что точки указатель на адрес b, затем после a=32+8 p=&a и двойной указатель *p= 32-b так *p=24. Is 24 Адрес, в котором хранится указатель p? потому что теперь значение a должно быть 24 согласно упражнению, и я не могу понять, почему.

Может ли кто-нибудь сказать мне шаг за шагом, как мне с этим заниматься?

ответ

5

К моменту, когда func называется, a = 24, и p является адресом a.

Внутри function, однако, a относится к глобальнойa, а не тот, объявленного в main. func первые присваивает , чтоa быть 15. Тогда:

  • **y является a в main
  • x - a является main «ы a (24) минус глобальная a (15), получая 9
  • так **y = x - amain от a до 9
+0

Благодарим вас за ответ, но я не могу понять, почему * p = 32-8 подразумевает a = 24. Я имею в виду, что означает * p = 24? 24 адреса? –

+0

'p' является указателем на' a' в 'main' (' p = &a'); '* p = 24' означает' присваивать 24 переменной, на которую указывает p'. –

+0

@Giorgio: Если 'p == & a ', тогда' * p == a', поэтому '* p = 24' совпадает с написанием' a = 24'. –

0

До этого вызова

funct (a, &p); 

переменная a равна 24 в связи с этим утверждением

*p = 32 - b; 

где b равно 8.

Внутри функции в этой отчетности

a = 15; 
**y = x - a; 

a установлено в 24 - 15, которое равно 8, потому что указатель разыменовывает *y указывает на исходную переменную a.

+0

Как может 'a' быть 24 и 15 одновременно? –

+0

@ScottHunter Привет, разработчик 3/4. :) Это не в одно и то же время. Перед вызовом функции a равно 24. И внутри функции из-за утверждения ** y = x - a; что эквивалентно 24 - 15 a, устанавливается в 9. –

+0

*, для которого * 'a' установлено значение 9? –

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