1. 程式人生 > 實用技巧 >學習第26天

學習第26天

C語言

  1. 函式指標變數呼叫函式、

    1. 函式在編譯時系統會給函式分配一個入口地址、也稱為 函式的指標(地址)、

    2. 有地址便可定義一個指標變數指向該函式、然後可以通過指標變數呼叫該函式、

    3. 函式在執行時會佔用一段記憶體單元、有一個起始地址、有地址就可以用一個指標變數指向一個函式、從而通過指標變數呼叫、

    4. 函式名代表函式的的入口地址、

    5. 函式指標不能指向函式中間的某一條語句、

    6. 函式指標變數定義——資料型別識別符號(*指標變數名)(形參列表);

    7. 資料型別識別符號=函式的返回型別、

    8. 可以通過函式指標指向不同的函式、來呼叫不同的函式、

    9. 函式呼叫不僅可以通過函式名呼叫也可以使用函式指標呼叫、指向函式的指標不能做運算、

    10. int	max(int a, int b)
      {
      	if (a > b)
      		return a;
      	return b;
      	
      }
      int main()
      {
      	int c;
      	int (*e)(int a, int b);//定義函式指標變數、
      	/*注意!!!
      	int *e(int a, int b);這樣就成函式宣告、括號優先順序高、所以變成int* 變成了函式的返回值型別、
      	可以寫成int (*e)(int , int );只保留型別、*/
      	e = max;//將函式入口地址賦值給e、e和max的地址是不相同的、max不是真正的函式地址、
      	c =(*e)(19,39);//e地址是真正的函式地址、但列印地址、時、列印的時c的地址、
      	//c = max(9, 18);//常規函式呼叫、
      	printf("c=%d\n", c);
      }
      
  2. 把指向函式的指標變數作為函式引數、

    1. int	max1(int a, int b)
      {
      	if (a > b)
      		return a;
      	return b;
      	
      }
      int max2( int a,
      	int b,
      	int(*c)(int a, int b)//形參就是函式指標、
      )
      	{
      	int d = c(a, b);//呼叫、函式指標c所指向的函式、
      	return d;
      	}
      
      int main()
      {
      
      	int e;
      	e = max2(30, 29,max1);
      	printf("e=%d\n", e);
      
      	int (*f)(int, int);//定義函式指標變數
      	f = max1;
      	e = max2(3, 59, max1);
      	printf("e=%d\n", e);
      }
      
  3. 返回指標值的函式、

    1. int d;//解決5行出現的問題、定義全域性變數、這樣記憶體就不會被釋放、可以一直使用、
      int* a(int b, int c)
      {
      	int  d = b + c;
      	return &d;//!!!有風險、因為d在a函式呼叫完後會將d的的記憶體釋放、所以、會出現錯誤、
      }
      
      int main()
      {
      
      	int *e;
      	e = a(4, 8);
      	printf("合是%d\n",*e);