函式/函數

函式/函數也是很多程式語言的必備語法,一般而言,會有語言的內建函式及自定義函式。

內建函式

一般而言,程式語言會有內建函式,例如,scanf()及printf()都是C及C++的內建函式,C及C++的內建函式相當的多,無法一一介紹。

自行定義函式

這邊主要介紹的是我們自行定義的函式,有時候,有些程式碼的邏輯會重複,我們就可以利用函式來重複利用這些邏輯。

其實我們一直在寫的main(),本身就是個函式,執行C及C++時,就會呼叫這個預設的函式。

#include <stdio.h>
main(){
  printf("hello!");
}

一個基本的函式,包括函式的名稱,透過函式名稱後的括號,定義函式的引數/參數,也可以定義函式的回傳值型態。假如,我們寫一個相加的函式,傳入兩個整數,要回傳相加的結果,結果是個整數,函式寫成:

#include <stdio.h>
**int add(int a, int b){
  return (a+b);
}**
main(){
  int first = 0, second = 0;
  scanf("%d %d", &first, &second);
  int result = **add(first, second);**
  printf("result: %d", result);
}

在C及C++裡,傳遞引數/參數的方式是依順序傳遞,所以,雖然在main()裡,變數稱為first、second,在add裡,可以重新命名為a、b。另外,在C及C++裡,傳遞變數是採用傳值(call by value)的方式進行,也就是first、second的值被複製一份到a、b裡面,在add裡如果更動a、b的內容,是不會變更first、second的內容。

#include <stdio.h>
int add(int a, int b){
  int c = a + b;
  a++;
  b++;
  return c;
}
main(){
  int first = 0, second = 0;
  scanf("%d %d", &first, &second);
  int result = add(first, second);
  printf("result: %d\\n", result);
  printf("first, second: %d %d", first, second);
}

Untitled

變數範圍

我們在add()裡是無法直接使用first、second,編譯時,就會有錯誤訊息,「’first’ undeclared」。

Untitled