亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

C語言

C語言函數(shù)調(diào)用與參數(shù)傳遞

時間:2022-10-10 11:55:16 C語言 我要投稿
  • 相關(guān)推薦

C語言函數(shù)調(diào)用與參數(shù)傳遞

  函數(shù)是C語言中的基本組成單位,一個較大的C程序一般可分為若干個程序模塊,實現(xiàn)某一特定功能的模塊主要由函數(shù)來完成。下面是小編收集整理的C語言函數(shù)調(diào)用與參數(shù)傳遞相關(guān)內(nèi)容,歡迎閱讀,希望大家能夠喜歡。

  1、主調(diào)函數(shù)與被調(diào)函數(shù)

  計算機在執(zhí)行C程序時總是從main函數(shù)開始,如果遇到要調(diào)用某個函數(shù),則主函數(shù)稱為主調(diào)函數(shù),被調(diào)用者稱為被調(diào)函數(shù)。一個C程序可由一個main函數(shù)和若干個其他函數(shù)構(gòu)成,main函數(shù)用來解決整個問題,它調(diào)用解決小問題的其他函數(shù),其他函數(shù)也可以相互調(diào)用。調(diào)用者就是主調(diào)函數(shù),被調(diào)者就是被調(diào)函數(shù),應(yīng)當注意,main函數(shù)只能由系統(tǒng)調(diào)用。

  2、實際參數(shù)與形式參數(shù)

  在調(diào)用有參函數(shù)時,主調(diào)函數(shù)和被調(diào)函數(shù)之間有數(shù)據(jù)傳遞關(guān)系。在主調(diào)函數(shù)中進行函數(shù)調(diào)用時,函數(shù)名后面括弧中的參數(shù)稱為實際參數(shù),簡稱實參。在定義函數(shù)時函數(shù)名后面括弧中的變量名就是形式參數(shù),簡稱形參。即實參出現(xiàn)在函數(shù)調(diào)用中,形參出現(xiàn)在函數(shù)定義中。主調(diào)函數(shù)通過函數(shù)調(diào)用將實參中的數(shù)據(jù)傳遞給被調(diào)函數(shù)的形參,從而實現(xiàn)函數(shù)間的數(shù)據(jù)傳遞。另外實參與形參進行數(shù)據(jù)傳遞時,系統(tǒng)要求實參與形參在數(shù)量、類型、順序應(yīng)嚴格保持一致,這一點在使用上要特別注意。

  3、變量存儲類型與作用域

  主調(diào)函數(shù)和被調(diào)函數(shù)數(shù)據(jù)傳遞往往要通過變量進行,不同的變量類型影響數(shù)據(jù)的處理結(jié)果。C語言中變量按存儲時分配的空間不同可以分為自動變量,寄存器變量,靜態(tài)變量和外部變量。按變量的生命周期可以分為局部變量和全局變量,局部變量是在一個函數(shù)內(nèi)部定義的變量,在存儲器的動態(tài)存儲區(qū)進行分配空間,作用域只在本函數(shù)內(nèi)部有效,比如在主函數(shù)里定義的自動變量,寄存器變量,函數(shù)中的形式參數(shù)等都屬于局部變量,在函數(shù)調(diào)用時,系統(tǒng)才為其分配存儲空間,函數(shù)調(diào)用結(jié)束后,空間釋放。而對于靜態(tài)型局部變量是程序編譯時由系統(tǒng)在存儲器的靜態(tài)存儲區(qū)為其分配存儲空間,函數(shù)調(diào)用結(jié)束后,空間不釋放,其值要保留到程序退出。全局變量是在程序整個運行期間都要占用內(nèi)存,所以它是全程有效,貫穿于主調(diào)函數(shù)與被調(diào)函數(shù)全過程,其值也要保留到程序退出為止。

  4、參數(shù)傳遞的本質(zhì)與屬性

  函數(shù)參數(shù)傳遞的過程,本質(zhì)上是一種賦值過程即值傳遞過程,在調(diào)用函數(shù)之前,函數(shù)的每個實際參數(shù)將被復(fù)制,復(fù)制的值代替對應(yīng)的形式參數(shù)。所以形參實際上得到的不是實參本身,而是實參的值或者實參所代表的值。因此,如果一個變量傳遞給一個函數(shù),這個變量在調(diào)用環(huán)境中所存儲的值并不會被函數(shù)修改,所以形參的值不會反過來影響實參,即實參與形參值傳遞是單向性的。這兩個問題是學(xué)習(xí)和理解函數(shù)參數(shù)傳遞的根本,很多學(xué)習(xí)C語言的人對這兩個問題不是很理解,下面舉例說明函數(shù)調(diào)用時參數(shù)傳遞過程。

  4.1 數(shù)值傳遞

  當變量為普通變量時,函數(shù)實參可以是自動局部變量,靜態(tài)局部變量,數(shù)組元素,寄存器變量,結(jié)構(gòu)體變量,結(jié)構(gòu)體變量成員,常量等形式,函數(shù)形參為對應(yīng)類型的變量,調(diào)用函數(shù)時,由系統(tǒng)給形參分配存儲單元,存放從實參復(fù)制過來的數(shù)值。函數(shù)調(diào)用結(jié)束后,形參存儲單元釋放。

  例題1:

  #include

  void func1(int x)

  {++x;

  printf (“%d”,x);

  }

  int main()

  {int n=10;

  func1(n);

  printf (“%d”,n);

  return 0 ;

 。

  例題1中main函數(shù)調(diào)用func1函數(shù)時,把實參n的值10(注意不是n)傳給了形參x,x在func1函數(shù)中進行增1運算, 這時x的值發(fā)生了改變,但該值不能返回到實參n中,因為x是func1函數(shù)內(nèi)部定義的變量,屬于局部變量,調(diào)用函數(shù)時,系統(tǒng)為x變量在存儲器的動態(tài)存儲區(qū)分配存儲空間,函數(shù)調(diào)用結(jié)束后,x變量被釋放,數(shù)值被清,故n值不變,體現(xiàn)了傳值的單向性。

  4.2 地址值傳遞

  地址值傳遞是指實參與形參之間傳遞的數(shù)據(jù)是地址,與數(shù)值傳遞不同的是,地址值傳遞的是形參接收實參地址的復(fù)制值,而不是實參值本身。另外,地址值傳遞方式中系統(tǒng)不為形式參數(shù)變量分配存儲空間,這一點也與數(shù)值傳遞方式不同。因為函數(shù)調(diào)用完成數(shù)據(jù)傳遞后,實參與形參擁有相同的變量地址,它們指向同一變量單元,該變量在主調(diào)函數(shù)定義時已經(jīng)分配了存儲空間,形參只是接收了它的一個地址值,并沒有接收變量本身。根據(jù)參數(shù)類型的不同,地址值傳遞方式常見的有如下幾種情況。

  4.2.1 實參為變量地址,形參為指針

  例題2:

  #include

  void func2( int *x,int *y)

  {

  x=y;

  }

  int main()

  { int a=2,b=3;

  func2(&a,&b);

  printf ("%d,%d",a,b);

  return 0;

  }

  例題2中在主調(diào)函數(shù)中將a,b的地址值傳給了形參指針x和y,在被調(diào)函數(shù)中將y值賦給了x,這時x的值發(fā)生了改變,x存放的是y的存儲地址,即x指向3,但是這個指向并不能返回到主調(diào)函數(shù)。因為這個地址值在函數(shù)調(diào)用結(jié)束后被釋放,其值消失。當然,如果想在被調(diào)函數(shù)中修改主調(diào)函數(shù)中實參變量的值,需要修改指針變量x和y所指向的地址中的內(nèi)容。比如將x=y改為*x=*y,即可達到修改實參變量的目的,但是必須清楚,雖然被調(diào)函數(shù)通過指針可以修改主調(diào)函數(shù)中的值,但這只是一種間接訪問數(shù)據(jù)的形式而已,實參向形參傳遞數(shù)據(jù)的單向性是不變的。

  4.2.2 實參為數(shù)組名,形參為指針

  在C語言中,數(shù)組名是一個地址,而且是一個地址常量,它代表的是該數(shù)組元素的首地址,不是一個變量。當使用數(shù)組名作為實參時,實參的值就是數(shù)組的首地址,形參指針接收的也是該數(shù)組的首地址,被調(diào)函數(shù)通過形參指針的變化來訪問主調(diào)函數(shù)中數(shù)據(jù)。

  例題3:

  #include

  void func3( int *x,int y)

  { int i;

  for(i=0;i printf("%4d",*x++);

  }

  int main()

  { int a[5]={1,2,3,4,5},b=5;

  func3(a,b);

  return 0;

  }

  例題3中形參有兩個,第一個表示形參接收一個整型類型的地址,第二個表示接收一個整型類型的數(shù)據(jù),至于實參是不是一個指針,是不是一個整型變量,形式參數(shù)并不理會,只管數(shù)據(jù)的類型是否匹配。而從主調(diào)函數(shù)中可以看出,實參為數(shù)組名(地址)和整型數(shù)據(jù)(整型類型),符合參數(shù)傳遞規(guī)則。這樣發(fā)生函數(shù)調(diào)用時,形參指針指向了數(shù)組a的第一個元素,通過循環(huán)程序,輸出了數(shù)組a的所有元素。

  這里還有一個問題,形參指針x在被調(diào)函數(shù)中的值發(fā)生了變化,這個值是不會返回給實參的,很明顯,實參中的第一個參數(shù)a是數(shù)組名,代表一個地址常量,肯定不能對它進行賦值操作,這里進一步驗證了實參與形參值傳遞是單向性的。

  4.2.3 實參為數(shù)組名,形參為數(shù)組名

  當實參與形參均為數(shù)組名時,這種方式跟其他的地址值傳遞方式是一樣的,系統(tǒng)也是不給形參數(shù)組分配內(nèi)存空間,而是將形參數(shù)組名處理成一個指針,因此形參數(shù)組并不存在。當發(fā)生函數(shù)調(diào)用時,實參數(shù)組只是把首地址賦給形參數(shù)組名。這樣形參數(shù)組名也指向?qū)崊?shù)組,兩個數(shù)組共同占有一段內(nèi)存空間。因此通過改變形參數(shù)組元素的值來達到改變實參數(shù)組元素的目的。

  例題4:

  #include

  void func4(int b[5])

  {

  b[0]=5;

  b[1]=4;

  b[2]=3;

  b[3]=2;

  b[4]=1;

  }

  int main( )

  {int i;

  int a[5]={1,2,3,4,5};

  func4(a);

  for(i=0;i<5;i++)

  printf("%4d",a[i]);

  return 0;

  }

  例題中實參與形參均為數(shù)組名,調(diào)用函數(shù)時,實參數(shù)組的首地址復(fù)制后給了形參數(shù)組,使形參數(shù)組名指向了實參數(shù)組,當改變形參數(shù)組元素值時,實參元素值必然改變,因為實參數(shù)組和形參數(shù)組是同一塊存儲單元。

  4.2.4 實參為指針,形參為數(shù)組名

  4.2.5 實參為指針,形參為指針

  對于(1),(5)這兩種情況比較好理解,實參為指針,其值為地址,所以形參接收的也是地址,實參與形參類型匹配,可以進行數(shù)據(jù)傳遞,在此不一一介紹。

  C語言函數(shù)常用知識點

  總體上必須清楚的:

  1)程序結(jié)構(gòu)是三種:順序結(jié)構(gòu)、選擇結(jié)構(gòu)(分支結(jié)構(gòu))、循環(huán)結(jié)構(gòu)。

  2)讀程序都要從main入口,然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇),有且只有一個main函數(shù)。

  3)計算機的數(shù)據(jù)在電腦中保存是以二進制的形式.數(shù)據(jù)存放的位置就是他的地址.

  4)bit是位是指為0或者1。 byte是指字節(jié),一個字節(jié)=八個位.

  概念?嫉降模

  1、編譯預(yù)處理不是C語言的一部分,不占運行時間,不要加分號。C語言編譯的程序稱為源程序,它以ASCII數(shù)值存放在文本文件中。

  2、define PI 3.1415926;這個寫法是錯誤的,一定不能出現(xiàn)分號。 -

  3、每個C語言程序中main函數(shù)是有且只有一個。

  4、在函數(shù)中不可以再定義函數(shù)。

  5、算法:可以沒有輸入,但是一定要有輸出。

  6、break可用于循環(huán)結(jié)構(gòu)和switch語句。

  7、逗號運算符的級別最低,賦值的級別倒數(shù)第二。

  第一章C語言的基礎(chǔ)知識

  第一節(jié)、對C語言的基礎(chǔ)認識

  1、C語言編寫的程序稱為源程序,又稱為編譯單位。

  2、C語言書寫格式是自由的,每行可以寫多個語句,可以寫多行。

  3、一個C語言程序有且只有一個main函數(shù),是程序運行的起點。

  第二節(jié)、熟悉vc++

  1、VC是軟件,用來運行寫的C語言程序。

  2、每個C語言程序?qū)懲旰,都是先編譯,后鏈接,最后運行。(.c—.obj—.exe)這個過程中注意.c和.obj文件時無法運行的,只有.exe文件才可以運行。(?迹。

  第三節(jié)、標識符

  1、標識符(必考內(nèi)容):

  合法的要求是由字母,數(shù)字,下劃線組成。有其它元素就錯了。

  并且第一個必須為字母或則是下劃線。第一個為數(shù)字就錯了

  2、標識符分為關(guān)鍵字、預(yù)定義標識符、用戶標識符。

  關(guān)鍵字:不可以作為用戶標識符號。main define scanf printf都不是關(guān)鍵字。迷惑你的地方If是可以做為用戶標識符。因為If中的第一個字母大寫了,所以不是關(guān)鍵字。

  預(yù)定義標識符:背誦define scanf printf include。記住預(yù)定義標識符可以做為用戶標識符。

  用戶標識符:基本上每年都考,詳細請見書上習(xí)題。

  第四節(jié):進制的轉(zhuǎn)換

  十進制轉(zhuǎn)換成二進制、八進制、十六進制。

  二進制、八進制、十六進制轉(zhuǎn)換成十進制。

【C語言函數(shù)調(diào)用與參數(shù)傳遞】相關(guān)文章:

C語言函數(shù)參數(shù)傳遞問題03-22

C++調(diào)用C函數(shù)的方法11-15

C語言函數(shù)的參數(shù)和返回值11-16

C++如何調(diào)用matlab函數(shù)06-29

c語言數(shù)學(xué)函數(shù)的介紹10-20

C語言中函數(shù)的區(qū)分有哪些04-27

怎樣學(xué)習(xí)c++c語言編程04-28

C語言的基本構(gòu)成12-05

c語言的優(yōu)點介紹04-13