1. 程式人生 > >C語言中,函式指標陣列的用途:轉移表

C語言中,函式指標陣列的用途:轉移表

計算器的實現:
方法一:

#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a*b;
}
int div(int a, int b)
{
return a / b;
}
int main()
{
int x, y;
int input = 1;
int ret = 0;
while (input)
{
printf( "*************************\n"
); printf( " 1:add 2:sub \n" ); printf( " 3:mul 4:div \n" ); printf( "*************************\n" ); printf( "請選擇:" ); scanf( "%d", &input); switch (input) { case 1: printf( "輸入運算元:" ); scanf( "%d %d", &x, &y); ret = add(x, y); break; case 2: printf( "輸入運算元:" ); scanf( "%d %d", &x, &y
); ret = sub(x, y); break; case 3: printf( "輸入運算元:" ); scanf( "%d %d", &x, &y); ret = mul(x, y); break; case 4: printf( "輸入運算元:" ); scanf( "%d %d", &x, &y); ret = div(x, y); break; default: printf( "選擇錯誤\n" ); break; } printf( "ret = %d\n", ret); } return 0; }

方法二:

#include <stdio.h>
int add(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a*b; } int div(int a, int b) { return a / b; } int main() { int x, y; int input = 1; int ret = 0; int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //轉移 表 while (input) { printf( "*************************\n" ); printf( " 1:add 2:sub \n" ); printf( " 3:mul 4:div \n" ); printf( "*************************\n" ); printf( "請選擇:" ); scanf( "%d", &input); if ((input < 4 && input > 1)) { printf( "輸入運算元:" ); scanf( "%d %d", &x, &y); ret = (*p[input])(x, y); } else printf( "輸入有誤\n" ); printf( "ret = %d\n", ret); } return 0; }

相關推薦

C言中函式指標陣列用途轉移

計算器的實現: 方法一: #include <stdio.h> int add(int a, int b) { return a + b; } int sub(int a, int b)

C言中通過指標給結構體中的變數賦值

typedef struct Mech_Para// { int32_tP001_TipBoxX; int32_tP002_TipBoxY; int32_tP003_TipBoxZ; int32_tP004_IntervalX; int32_tP005_IntervalY;

C言中函式不宣告也能使用但會出現warning: implicit declaration of function

偶然發現有很多自定義函式未經宣告卻能在主程式中被呼叫,這就奇怪了,連使用標準庫函式printf()都要包括標準輸入輸出標頭檔案<stdio.h>,何況是自定義函式?這個問題困擾了我很久。 今天通過實驗,基本明白了箇中原因。一、在VC6中, 1、檔案test1.

C言中為什麼字串可以賦值給字元指標變數

1.以字串形式出現的,編譯器都會為該字串自動新增一個0作為結束符,如在程式碼中寫  "abc",那麼編譯器幫你儲存的是"abc\0" 2."abc"是常量嗎?答案是有時是,有時不是。 不是常量的情況:"abc"作為字元陣列初始值的時候就不是,如                  char str[] = "

[C]c言中scanf裡面要是陣列要不要加&?

先上一段程式碼給大家看下 #include<stdio.h> int main(){ int a[100]; int n,i; scanf("%d",&n);//輸入個數 fo

c言中printf函式列印char型變數0xFF輸出為0xFFFFFFFF的解決方法

問題描述:在編寫udp程式解析資料的時候,發現接收的char型變數為0xFF,但是使用printf後列印為0xFFFFFFFF,除錯程式查詢原因後發現使用char時,對於printf來說其值為0xFFFFFFFF。原因是%x要求的是無符號整形變數,你傳入的是char型,這裡有

C言中如何通過函式來改變一個變數的值

最近看面試題,遇到一些關於通過函式改變一個變數的值得問題,現在終結一下: 先看下面一段程式碼: #include <stdio.h>#include <stdlib.h> void GetMemory(char *p) { p=(char

C言中關於陣列和結構體變數的的預設初值問題

結果自己跑一下,需要自己修改不同賦初值情況來驗證,乾貨就是註釋 #include <iostream> #include <stdio.h> using namespace std; int val;//外部變數預設值為0 typedef stru

函式中有多個return?C言中一個函式可以有幾個返回值?

      在移植wifi的程式碼時,遇到了一些與下面類似的函式,這些函式中有不只一個return,這可是個新鮮的玩意兒: int func (int b) { int a=5; if (a>b) return a; else

C言中利用巨集定義一個字串和字元陣列定義的字串其末尾都會自動新增\0字元

#include <stdio.h> #define MYPHONE "AT+CMGS" unsigned char SMS[]="HELLO, WELCOME TO RCCTS!"; unsigned char *String; unsigned char i=0; void main() {

c言中getchar函式的用法涉及EOF檔案結束符的問題

 最近因為遇到了這個EOF的問題就查了下,一下的這些內容幫助我解決了困惑已久的問題,寫在這個希望能夠幫助遇到同樣問題的朋友!       在C語言中有個重要的庫函式getchar(),可從終端獲得一個字元的ASCII碼值。在終端輸入字元時並非輸入一個字元就會返回,而是在遇到

C言中為什麼結構體後面經常定義一個空陣列

最近在寫C程式碼,經常看到Linux 的標頭檔案中有的結構體後面會定義一個空陣列,不知道其為何作用?經過高人指點終於明白其要點! struct inotify_event { __s32 wd; __u32 mask; __u32 cookie;

C言中隱藏結構體的細節

all printf span 包括 strcpy () 創建 提高 結構體指針 我們都知道,在C語言中,結構體中的字段都是可以訪問的。或者說,在C++ 中,類和結構體的主要區別就是類中成員變量默認為private,而結構體中默認為public。結構體的這一個特性,導致結構

【轉載】在C言中double、long、unsigned、int、char類型數據所占字節數

src 有關 指針變量 none nbsp ide iso isp cli 和機器字長及編譯器有關系: 所以,int,long int,short int的寬度都可能隨編譯器而異。但有幾條鐵定的原則(ANSI/ISO制訂的): 1 sizeof(short int)&

C言中當計算字符數組長度時用sizeof 和strlen 的原理及兩者的區別

指針 data- 編譯器 tracking 行處理 ews csdn 編譯 分配 字符數組的長度計算:必須以終止符’\0‘作為邊界,但對字符數組賦值時,有兩種方式: 1:定義時用字符初始化 (1)char chs[7] = {‘a‘, ‘c‘, ‘0‘, ‘z‘, ‘3

c言中 gotoxy() 函式的使用

轉自  https://blog.csdn.net/radjedef/article/details/79028329 #include <stdio.h> #include <windows.h> void gotoxy(int x, int y) {

關於C言中printf函式“輸出歧視”的問題

目錄 關於C語言中printf函式“輸出歧視”的問題 問題描述 探索問題原因 另一種研究方法 問題結論 關於C語言中printf函式“輸出歧視”的問題 問題描述 昨天晚上被問到一個問題,為什麼在同一個printf函式中兩次輸出一個double型變

c言中while(1)語句使用break語句跳出迴圈

這個要分情況的:1:本身條件就有出口,這樣的話,可以自然退出,也可以認為退出2:如果本身條件永遠不可能滿足,例如:while(1)像這種的話想要退出的話就必須人為干涉,例如int num = 0;while(1){ num++; if(num >1000

c言中rand()函式的用法筆記

最近在學著用c寫一些小程式,過程中遇到很多問題,在網上查很多大神的講解,以及查閱vs2010的幫助文件。在此做個筆記,以便今後查閱,備忘。感謝無私奉獻講解的大神們! 一、rand() rand()函式用來產生隨機數,但是,rand()的內部實現是用線性同餘法實現的,是偽隨機數,由於週期較長,

(C言中printf函式讀取的具體分析)

(C語言中printf函式讀取的具體分析) 不多說,直接上。printf函式將傳入的資料傳送到記憶體堆區(緩衝區),然後再根據前面的(格式說明符一個個讀取,這樣會造成錯誤) #include<stdio.h> #include<limits.h> #incl