查看完整版本: c++ func1副函式
頁: [1]

yoyo4607 發表於 2016-4-22 12:10 AM

c++ func1副函式

#include <iostream>
#include <cstdlib>
using namespace std;
void func(int);

int main(void)
{
  int a;

  func(a);


  system("pause");
  return 0;
}
void func (int a)
{
  a=a+1;

  cout << "In func1()a=" << a <<  endl;
  return;
}




這是老師出的作業,我嘗試先寫一個a跑出來的值就完全不對
請問該怎麼解決?
<div></div>

inunu 發表於 2016-4-22 04:39 AM

在 main() 裡頭你的 a 沒有設定數值就被使用了
換句話說你給 func() 的數值是個隨機的數值
這類的情況 (使用未初始的變數) 通常會出現 compiler warning 提醒
給它一個數值例如 a = 3; 再呼叫 func(a); 就好了

yoyo4607 發表於 2016-4-22 06:03 PM

有解決了
a=0
func1 (int a) 和func2 (int *a) 分別執行a=a+1有什麼差別呢?
要如何同時印出各別的答案?

tevin 發表於 2016-4-22 09:28 PM

沒給初值
也就是你只是將a變數傳入 sub function
但所傳入的 a 為多少?

tevin 發表於 2016-4-23 05:25 PM

yoyo4607 發表於 2016-4-22 06:03 PM static/image/common/back.gif
有解決了
a=0
func1 (int a) 和func2 (int *a) 分別執行a=a+1有什麼差別呢?


不是很了解你要的結果為何??
func1(int a) 叫 call by value
func2(int *a) 叫 call by value
func2 內的結果跟func1結果是一樣的
不一樣的會是在 func2 呼叫後 的 a 值
func1 後 a=0
func2 後 a=1
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div>

cgaotd 發表於 2016-4-24 05:39 PM

這題目應該是要讓你看call by address和call by value 的差異

func1(int a)----是call by value(只傳值)
func2(int *a)---是call by address(傳a的記憶體位址)

call by address 當你在副函式裡更改*a主函式裡的a值就會隨著更改
call by value 當你在副函式裡更改a的值主函式裡的a值不會隨著更改

想瞭解更多就google一下call by address 應該會找到很多資料
頁: [1]