程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習筆記【函數】函數調用與變量的作用域

C語言學習筆記【函數】函數調用與變量的作用域

編輯:關於C語言

C語言學習筆記

  之   函數調用與變量的作用域

但凡程序就離不開函數,不管是高級語言還是C語言,函數是組成程序的單位。形形色色的函數既扮演著自己的角色,又在總體中擔任著舉足輕重的角色。

一:函數調用

函數的基本形式:

無參數函數一般形式

有參數函數一般形式

函數類型說明符 函數名)

{    

     函數體;

函數類型說明符 函數名)

    函數體;

 以一個程序實例來闡述函數的一些注意事項。


#include <stdio.h>
float ave(float b[],int m); //函數聲明
main()
{
  float a[20],aver;   
  int j,n;
  printf("輸入班級的人數\n");
  scanf("%d",&n);
  printf("輸入分數:\n");
  for(j=0;j<n;j++)
  {
     scanf("%f",&a[j]);
  }
  /*
     調用ave函數,a和n是實參,a是數組名,代表數組首地址,n是值。
  */
  aver=ave(a,n);  
  printf("平均分是 %f\n",aver);
}
float ave(float b[],int m)//函數ave b[]和m是形參,數組b的接受的是a[]的首地址,m接受n的值
{
   int i;
   float aver1,sum=0;
   for(i=0;i<m;i++)
   {
      sum+=b[i];
   }
   aver1=sum/m;
   return(aver1);//返回平均值給main函數,用來輸出
}


1.每個函數必須單獨定義,不允許嵌套定義,即不能在一個函數的內部再定義另一個函數

2. 形參:在進行函數定義時設定的參數

  實參:在進行有參函數調用時所用的參數

3 .實參傳遞給形參的方式:

    值傳遞值單向傳遞方式)

        如上程序中的實參a傳遞給形參b[],a是數組名,代表的是數組的首地址。實參數組名a並不是將數據a中所有學生的成績傳送給了形參數組b,而是將實參數組的首地址傳遞給了b,從而使這兩個數組共用同一個存儲空間,即a[0]=b[0]......

    地址傳遞方式

        如上程序中的實參n傳遞給了形參m ,n和m都是實實在在的值。

    需要注意的是:在被調函數中,形參的類型必須與實參要一致,比如:參數的a[]是float,那麼形參中的數組b[]也必須是float類型

4. 函數返回值

在被調函數內采用return語句獲得函數的返回值,一個函數利用return語句只能返回一個值。

return語句中的表達式的類型應該與函數類型說明是一致的。比如:程序中的,aver函數中的return(aver1)中的aver1的類型與函數aver的函數類型一樣,即都是float.

但是當return語句中的表達式的返回值類型與函數的類型不一致時候,應與函數類型說明符為准。系統會自動將return返回值轉換為函數類型說明符的類型。

當函數的返回值的數據類型是int時,在函數定義時,函數類型說明符可以省略,也就是說,系統默認的返回值類型是整型。

5. 函數的聲明

程序中一切都遵循先定義後使用的原則,函數也不例外。

上述程序中,aver函數定義在main函數之後,所以不遵循先定義後使用的原則,為了防止這種事情的發生,我們先用一個函數聲明來避免這一點,那就是在main函數之前加上的函數聲明語句:float ave(float b[],int m);

如果將函數aver放到main函數之前的話,就不用加這一條聲明語句了。

二:變量的作用域

int m,n;

double fun(int x ,int y)

{

  int m,n;

  ....

}

main()

{

  int a,b;

    if ()

    {

         int x,y;

     }

}

1.局部變量

局部變量只能在局部使用。上述中的函數fun中的x,y和m,n只能在函數fun中有效,一旦出了fun的范疇就沒有用了。再比如if中的x和y只能在if()中使用。

2.全局變量

第一行的m和n,就是全局變量,這兩個變量在全部函數中都能使用

但是我們看到m和n和函數fun中的m和n重名了,那執行函數fun中的m和n的時候,到底用全局變量還是用局部變量,答案是局部變量。


本文出自 “趙玉強的博客” 博客,請務必保留此出處http://zhaoyuqiang.blog.51cto.com/6328846/1264485

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved