學習筆記之——C語言 函數( 二 )


int add(int x,int y)
{
int z=0;
return z=x+y;
}
int add2(int* x,int* y)
{
int z=0;
return =*x+*y;
}
int main()
{
int a=0;
 int b=9;
scanf(“%d %d”,&a,&b);
printf(“%d\n”,add(a,b));   //傳值調用
printf(“%d\n”,add2(&a,&b));   //傳址調用
return 0;
}
6、 函數的嵌套調用和鏈式訪問
嵌套調用
函數和函數之間可以有機的組合的
例:
int main()
{
int a=0;
int b=0;
scanf(“%d %d”,&a,&b);
add(a,b);
add2(&a,&b);  //本句與上一句組成嵌套函數(沒搞懂)
return 0;
}
鏈式訪問
把一個函數的返回值作為另一個函數的參數
int add(int x,int y)
{
int z=0;
return  z=x+y;
}
int add2(int * x,int * y)
{
int z=0;
return z=*x+*y;
}
include<stdio.h>
int main()
{
int a=0;
int b=0;
scanf(“%d %d”,&a,&b);
printf(“%d\n”,add(add2(&a,&b),add2(&a,&b)); //鏈式訪問
return 0;
}
7、 函數的聲明和定義
函數聲明
1) 告訴編譯器有一個函數叫什么,參數是什么 , 返回類型是什么,但是具體是不是存在,無關緊要
2) 函數的聲明一般出現在函數使用之前,要滿足先聲明后使用
3) 函數的聲明一般要放在頭文件中
注:以博客作者的井字棋為例:
#include “game.h”   //引用頭文件
//棋盤
void.showborad(char board[row][col],int row,int col);//聲明
//函數的定義
//函數的定義是指函數的具體實現,交代函數的功能實現
//初始化棋盤
void showborad(char board[row][col],int row ,int col)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
  {
for(j=0;j<col;j++)
{
   board[i][j]=’ ’;
printf(“%c”,board[i][j]);
  if(j<col-1)
{
printf(“|”);
}
}
printf(“\n”);
for(j=0;j<col;j++)
{
printf(“-“);
if(j<col-1)
{
printf(“|”);
}
}
printf(“\n”);
 }
}
8、 函數的遞歸
什么是遞歸
程序調用自身的編程技巧稱為遞歸,遞歸作為一種算法在程序設計語言中廣泛應用,一個過程或函數在其定義活說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題蹭蹭轉化為一個與原題目相似的規模較小的問題來求解 , 遞歸策略只需少量的程序就可以描述出解題過程所需要的多次重復計算,大大的減少了程序的代碼量,遞歸的主要思考方式在于:把大事化小
遞歸的兩個必要條件
1) 存在限制條件 , 當滿足這個限制條件的時候 , 遞歸便不再繼續
2) 每次遞歸調用之后越來越接近這個限制條件
9、 當自定義的函數名與庫函數重名的時候:
根據https://zhidao.baidu.com/question/369199943840037324.html中說明:當自定義函數與庫函數同名時,一般的調用是自定義函數優先,但是標準庫函數并不失去意義 。只是調用方式要有所改變:用雙冒號::開頭是調用庫函數,直接寫函數名是調用自定義的函數 。
舉例說明:
#include<stdio.h>
void printf()
{
puts(“12345”);
}
int main()
{
::printf(“abc\n”);
printf();
return 0;
}
運行結果如下:
abc
12345
10、
以下摘抄自譚浩強主編的《C語言程序設計》(第3版),算是我對照課本的學習筆記吧:
1、 函數是什么:
每一種計算機語言里都有子程序、函數之類,用于表達一小部分具體的功能,可以被其他部位的 函數調用使用 。函數這個概念來源于英文的function,譯成中文可以是函數、概念、功能等 。函數的存在使大規模的問題處理可以分解為一個個小的問題來解決,把整個問題分成模塊化組裝來解決 。這是函數存在的主要意義 。另外利用調用函數的方法可以減少代碼的數量,在主程序里不同部位出現的重復的功能組成單獨的、可以調用的模塊 , 在使用時不必重復敲入,同時還讓代碼直觀 。
C語言使用函數化編程,main函數成為主函數,程序在編譯過程中,從前往后編譯,實際運行的時候通過運行程序的命令直接調用main主程序 , 在主程序里通過直接或者間接的調用其他子函數 。
2、  函數在未調用時候,不占用內存 , 不分配位置,在實參傳遞給形參后,程序分配內存 。在調用結束后(子函數運行完畢),釋放形參單元 。所以函數是相互獨立的,定義需要分別定義,不能嵌套定義 。這個應該屬于局部變量的范疇了 , 后面學習局部變量應該容易理解 。

推薦閱讀