2013-10-23 105 views
0

我的老師今天在編程課上給了我們一個問題,我不明白他是如何得到答案的。我希望有人能向我解釋。我們基本上必須展示程序輸出的內容,但是我對如何得到問題的答案有些困惑。問題如下:C編程?使用指針

#include <stdio.h> 
    void do_something (int , int *); 

    int main (void) 
    { 
     int first = 1, second = 2 ; 
     do_something(second, &first); 
     printf("%4d%4d\n", first, second); 
     return (0); 
    } 

    void do_something (int thisp, int *that) 
    { 
     int the_other; 
     the_other = 5; 
     thisp = 2 + the_other; 
     *that = the_other * thisp; 
     return; 
    } 

回答

35 and 2 
+7

你不明白哪一行? – Gangadhar

+2

使用調試器(如果您知道如何使用它,可能通過IDE),請逐步執行程序並檢查發生了什麼。或者插入打印命令。 –

+1

@Nick:我認爲函數定義將是void do_somthing(int this,int * thatp);'而不是其他地方。 – legends2k

回答

1
thisp = 2 + the_other; 
*that = the_other * thisp; 

方式:

thisp = 2 + 5 
*that = 5 * 7 

而且that包含first地址在主這是在do_something覆蓋爲35 Second仍然是2.

+1

非常感謝,正是我一直在尋找。感謝你的幫助。 – Nick

3

函數do_something包含2個參數。

  1. 正常整數(thisp)
  2. 指針爲整數。 (那)

什麼你的老師想讓你學習的是,傳值通的地址。

通過值傳遞,原始值不會改變。這是因爲在給出的例子中。 變量值second被複制thisp變量。

在通過地址傳遞過程中,可以在函數內修改原始值。 這是因爲指針that指向變量first的位置。所以如果that的值改變了,那麼first的值也會改變。

這就是爲什麼,first的值在輸出中發生變化,second的值不受影響。

+1

'C'中沒有'通過引用'。該對象始終創建一個副本。錯誤的解釋。 – Sadique

+0

我的歉意,我的意思是通過地址。 – Sorter