一把梭系列 ~ C語言範例 (0020) [函式(函數) 參數(parameter)/引數(formal argument)/(輸入) 與 回傳值/返回值/(輸出)]

一把梭系列 ~ C語言範例 (0020) [函式(函數) 參數(parameter)/引數(formal argument)/(輸入) 與 回傳值/返回值/(輸出)]

一把梭系列 ~ C語言範例 (0020) [函式(函數) 參數(parameter)/引數(formal argument)/(輸入) 與 回傳值/返回值/(輸出)]


資料來源: https://openhome.cc/Gossip/CGossip/ArgReturn.html


線上執行: https://www.tutorialspoint.com/compile_c_online.php


★前言:

★主題:
    函式(函數) 的 輸入 / 輸出 相關規定如下:
    
    01.數量限制
        參數(parameter)/引數(formal argument/(輸入)的個數基本上沒有限制
        回傳值/(返回值)/(輸出)的個數只能單一

    02.輸入/輸出 資料型態
        基本資料型態(int,float,char…)
        複合資料型態
        
    03.輸入/輸出 資料方式
        傳值(call by value)
        傳址(call by address / call by pointer)
        
★code

#include <stdio.h>
#include <stdlib.h>

int power2(int num);
int power(int n, int p);

int* ints(int, int);

void intswap01(int a,int b);
void intswap02(int *a,int *b);

int main(void)
{
    int i;
    int size01 = 0;
    int init = 0;

    int num = 0;
    int p = 0;

    printf("輸入數值:");
    scanf("%d", &num);

    printf("輸入次方:");
    scanf("%d", &p);

    printf("%d 平方:%d\n", num, power2(num));
    printf("%d 的 %d 次方 %d\n", num, p, power(num, p));

    printf("陣列大小:");
    scanf("%d", &size01);
    printf("元素初值:");
    scanf("%d", &init);

    printf("陣列大小:%d\t元素初值:%d\n",size01,init);
    int *arr = ints(size01, init);
    for(i = 0; i < size01; i++) {
        printf("arr[%d] = %d\n", i, arr[i]);
    }

    free(arr);//釋放動態配置記憶體
    arr='\0';

    intswap01(size01,init);//傳值(call by value)
    printf("intswap01:陣列大小:%d\t元素初值:%d\n",size01,init);

    intswap02(&size01,&init);//傳址(call by address / call by pointer)
    printf("intswap02:陣列大小:%d\t元素初值:%d",size01,init);
    return 0;
}

int power2(int num)
{
    return power(num, 2);
}

int power(int n, int p)
{
    int r = 1;
    int i = 0;
    for(i = 0; i < p; i++) {
        r *= n;
    }

    return r;
}

void intswap01(int a,int b)
{
    int c=0;
    c=a;
    a=b;
    b=c;
}

void intswap02(int *a,int *b)
{
    int c=0;
    c=*a;
    *a=*b;
    *b=c;
}

int* ints(int size01, int init)
{
    int i=0;
    int *arr = malloc(size01 * sizeof(int));//動態配置記憶體
    for(i = 0; i < size01; i++) {
        arr[i] = init;
    }
    return arr;
}


結果:



★延伸說明/重點回顧:

    01.參數(parameter)/引數(formal argument/(輸入)的個數基本上沒有限制
    
    02.回傳值/(返回值)/(輸出)的個數只能單一
    
    03.各函數之間的變數各自獨立
    
    04.想要在函數運算過程當中可以影響到其他函數的變數內容只能靠傳址(call by address / call by pointer)呼叫
    
    05.由於傳址(call by address / call by pointer)呼叫可以影響到其他函數的變數內容,所以也可以利用它來回傳一個以上的函數運算結果
    

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *