2017-01-25 128 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後

`*p=32-b` 

此亦24,p=&b意味着該指針指向b的地址,然後a=32+8 p=&a和雙指針*p= 32-b因此*p=2424指針p存儲的地址是?因爲現在根據練習a的值應該是24,我不明白爲什麼。

有人可以告訴我一步一步如何處理這些運動?

回答

5

當時func被調用,a = 24,p是地址a

裏面的function,然而,a全球a,而不是一個在main聲明。 func第一受讓人a爲15。然後:

  • **yamain
  • x - amaina(24)減去全局a(15),產生9
  • 所以**y = x - amaina至9
+0

謝謝你回答,但我不明白爲什麼* p = 32-8意味着a = 24。 我的意思是* p = 24是什麼意思? 24是地址嗎? –

+0

'p'是在'main'中指向'a'的指針('p = &a');'* p = 24'意思是'給p指向的變量賦值24' –

+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? –