main函數的傳參與返回


1、誰給main函數傳參
(1)調用main函數所在的程序的它的父進程給main函數傳參,並且接收main的返回值。
2、為什么需要給main函數傳參
(1)首先,main函數不傳參是可以的,也就是說父進程調用子程序並且給子程序傳參不是必須的。 int main(void)這種形式就表示我們認為不必要給main傳參。
(2)有時候我們希望程序有一種靈活性,所以選擇在執行程序時通過傳參來控制程序中的運行,達到不需要重新編譯程序就可以改變程序運行結果的效果。

3、表面上:給main傳參是怎樣實現的?
(1)給main傳參通過argc和argv這兩個C語言預訂的參數來實現
(2)argc是int類型,表示運行程序的時候給main函數傳遞了幾個參數;argv是一個字符串數組,這個數組用來存儲多個字符串,每個字符串就是我們給main函數傳的一個參數。argv[0]就是我們給main函數的第一個傳參,argv[1]就是傳給main的第二個參數····

4、本質上:給main傳參是怎樣實現的?
(1)上節課講過,程序調用有各種方法但是本質上都是父進程fork一個子進程,然后字進程和一個程序綁定起來去執行(exec函數族),我們在exec的時候可以給他同時傳參。
(2)程序調用時可以被傳參(也就是main的傳參)是操作系統層面的支持完成的

5、給main傳參要注意什么

(1)main函數傳參都是通過字符串傳進去的。
(2)程序被調用時傳參,各個參數之間是通過空格來間隔的。
(3)在程序內部如果要使用argv,那么一定要先檢驗argc。

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char * argv[])
{
    int i=0;
    int com1,com2;
    char c;
    for(i=0;i<argc;i++)
    {
        printf("第%d個參數是%s.\n",i,argv[i]);
    }
    if(argc<4)
    {
        printf("傳入參數過少\n");
        return -1;
    }
    com1=atoi(argv[1]);
    com2=atoi(argv[3]);
    c=*(*(argv+2)+0);
    switch(c)
    {
    case '+': printf("%d+%d=%d\n",com1,com2,com1+com2);break;
    case '-': printf("%d-%d=%d\n",com1,com2,com1-com2);break;
    case '^': printf("%d*%d=%d\n",com1,com2,com1*com2);break;
    case '/': printf("%f/%f=%f\n",(float)com1,(float)com2,(float)com1/(float)com2);break;
    case '%': printf("%d%%%d=%d\n",com1,com2,com1%com2);break;
    }

    return 0;
}

運行:

root@aff:/mnt/hgfs/linuxGX/c/main_func# ./a.out 1 2 3 4 5
第0個參數是./a.out.
第1個參數是1.
第2個參數是2.
第3個參數是3.
第4個參數是4.
第5個參數是5.
root@aff:/mnt/hgfs/linuxGX/c/main_func# ./a.out 1 + 3
第0個參數是./a.out.
第1個參數是1.
第2個參數是+.
第3個參數是3.
1+3=4

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM