㈠ C語言函數調用的三種方式並分別舉一例。
1、值傳遞,創建變數x和y,x的值等於a的值,y的值等於b的值
void Exchg1(int x, int y)
{
int tmp;
tmp=x;
x=y;
y=tmp;
printf(「x=%d,y=%d/n」,x,y)
}
void main()
{
int a=4,b=6;
Exchg1 (a,b) ;
printf(「a=%d,b=%d/n」,a,b)
}
2、地址傳遞,相當於建立了px和py兩個指向整型的指針,其值分別為a和b的地址
Exchg2(int *px, int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
print(「*px=%d,*py=%d/n」,*px,*py);
}
main()
{
int a=4;
int b=6;
Exchg2(&a,&b);
Print(「a=%d,b=%d/n」, a, b);
}
3、引用傳遞,x和y直接引用a和b,對a和b操作,相當於給a、b起了別名x、y
Exchg2(int &x, int &y)
{
int tmp=x;
x=y;
y=tmp;
print(「x=%d,y=%d/n」,x,y);
}
main()
{
int a=4;
int b=6;
Exchg2(a,b);
Print(「a=%d,b=%d/n」, a, b);
}
printf用法:
printf()函數的調用格式為:printf("<格式化字元串>",<參量表>)。
其中格式化字元串包括兩部分內容:一部分是正常字元,這些字元將按原樣輸出;另一部分是格式化規定字元,以"%"開始,後跟一個或幾個規定字元,用來確定輸出內容格式。
參量表是需要輸出的一系列參數,其個數必須與格式化字元串所說明的輸出參數個數一樣多,各參數之間用","分開,且順序一一對應,否則將會出現意想不到的錯誤。
比如:
int a=1234;
printf("a=%d ",a);
輸出結果為a=1234。
㈡ C語言如何調用
先聲明被調用函數,然後在主調函數(可以為main函數也可為一般功能函數)里進行調用!!!
㈢ C語言中方法的調用問題
定義了一個簡單的函數func1, 調用的時候只需要"函數名()" 的方式就可以調用的到。(至於調用的過程是如何處理的,就要參考匯編的知識了。)
但是,在實際的開發過程中可能會遇到這種情況, 函數名事先並不確定,函數名是通過一個字元串變數保存的,這種狀況該如何調用呢?
更具體一點的例子,函數名是通過外部輸入進去了。
該如何執行func1呢?
解決以上問題之前, 首先引入函數指針的概念。
在C語言中,某一數據變數的內存地址可以存儲在相應的指針變數中,比如 int * , char * 等,
對於函數來說,也同樣如此,函數的首地址也可以存儲在某個函數指針變數里,通過這個函數指針變數我們就可以調用所指向的函數了。
如何定義函數指針變數? 很簡單。
對應到上面 func1 函數,可以定義如下的指針變數。
void (*funcP)()
funcP這個名字可以隨便取。
/************************
* add by oscar999
************************/
func1()
{
printf("this is func1!\n");
}
void main()
{
void (*funcP)();
funcP = &func1;
(*funcP)();
}
有了如上的例子,不難想到:
如果事先定義一些函數指針,通過傳入的函數名字串,得到相應的函數指針,就可以實現函數調用了。
[cpp] view plainprint?
/************************
* add by oscar999
************************/
#include <stdio.h>
typedef void (*funcP)();
void func1()
{
printf("this is func1!\n");
}
void func2()
{
printf("this is func2!\n");
}
funcP getFuncPointer(char* sfuncname)
{
if(strcmp(sfuncname,"func1")==0)
{
return &func1;
}else if(strcmp(sfuncname,"func2")==0){
return &func2;
}
return NULL;
}
void main()
{
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");
scanf("%s",c); //input func1 or func2
funcp = getFuncPointer(c);
if(funcp!=NULL)
{
(*funcp)();
}
}
/************************
* add by oscar999
************************/
#include <stdio.h>
typedef void (*funcP)();
void func1()
{
printf("this is func1!\n");
}
void func2()
{
printf("this is func2!\n");
}
funcP getFuncPointer(char* sfuncname)
{
if(strcmp(sfuncname,"func1")==0)
{
return &func1;
}else if(strcmp(sfuncname,"func2")==0){
return &func2;
}
return NULL;
}
void main()
{
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");
scanf("%s",c); //input func1 or func2
funcp = getFuncPointer(c);
if(funcp!=NULL)
{
(*funcp)();
}
}
你可能會想,通過傳入的string 直接調用對應的function不就可以了嗎?類似:
[cpp] view plainprint?
/************************
* add by oscar999
************************/
#include <stdio.h>
typedef void (*funcP)();
void func1()
{
printf("this is func1!\n");
}
void func2()
{
printf("this is func2!\n");
}
void main()
{
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");
scanf("%s",c); //input func1 or func2
if(strcmp(c,"func1")==0)
{
func1();
}else if(strcmp(c,"func2")==0){
func2();
}
}
/************************
* add by oscar999
************************/
#include <stdio.h>
typedef void (*funcP)();
void func1()
{
printf("this is func1!\n");
}
void func2()
{
printf("this is func2!\n");
}
void main()
{
char c[20] = "\0";
funcP funcp = NULL;
printf("please input func name:");
scanf("%s",c); //input func1 or func2
if(strcmp(c,"func1")==0)
{
func1();
}else if(strcmp(c,"func2")==0){
func2();
}
}
以上這種對於 function 較少的狀況可以使用, 但是func很多的話, 或者動態的生成這部分的話,指針函數的方式就很好了。
函數名字串和函數指針放到一個name value set 中去, 這樣就可以很容易得到函數指針了。
㈣ c語言中函數的調用方法
呃···
看書會比較明白吧···
1、函數聲明: 返回類型 函數名(形參1,形參2,形參3);(以此類推,有幾個參數寫幾個)
2、函數調用:函數名 (實參1,實參2,實參3); (以此類推,有幾個參數寫幾個)
3、函數演算法:返回類型 函數名(形參1,形參2,形參3)(以此類推,有幾個參數寫幾個)
{
}
㈤ c語言中怎麼調用自己定義的函數
在使用一個函數之前必須先對他進行聲明:
//void B();聲明B函數的存在。void A(){B();//非法,程序執行到此時並不知道B函數的存在。}void B(){}
或者
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fa(int n)
{
int a;
for(a=2;a<=sqrt(n*1.0),n%a!=0;a++);
if(a>sqrt(n*1.0))
return(1);
else
return(0);
}
void main( )
{
int n,q;
scanf("%d",&n);
(5)c如何調用方法擴展閱讀
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int fa(int n)
{
int a;
for(a=2;a<=sqrt(n*1.0),n%a!=0;a++);
if(a>sqrt(n*1.0))
return(1);
else
return(0);
}
void main( )
{
int n,q;
scanf("%d",&n);
if(fa(n)==1)
printf("n");
else
printf("y");
system("pause");
exit(0);
}
㈥ C語言如何調用函數
C語言中,函數調用的一般形式為:
函數名(實際參數表)
對無參函數調用時則無實際參數表。實際參數表中的參數可以是常數、變數或其它構造類型數據及表達式。各實參之間用逗號分隔。
#include<stdio.h>
intfun(intx,inty);//函數聲明,如果函數寫在被調用處之前,可以不用聲明
voidmain()
{
inta=1,b=2,c;
c=fun(a,b);//函數的調用,調用自定義函數fun,其中a,b為實際參數,傳遞給被調用函數的輸入值
}
//自定義函數fun
intfun(intx,inty)//函數首部
{//{}中的語言為函數體
returnx>y?x:y;//返回x和y中較大的一個數
}
C語言中不允許作嵌套的函數定義。因此各函數之間是平行的,不存在上一級函數和下一級函數的問題。但是C語言允許在一個函數的定義中出現對另一個函數的調用。
這樣就出現了函數的嵌套調用。即在被調函數中又調用其它函數。這與其它語言的子程序嵌套的情形是類似的。其關系可表示如圖。
圖表示了兩層嵌套的情形。其執行過程是:執行main函數中調用a函數的語句時,即轉去執行a函數,在a函數中調用b 函數時,又轉去執行b函數,b函數執行完畢返回a函數的斷點繼續執行,a函數執行完畢返回main函數的斷點繼續執行。
㈦ c語言如何實現函數的調用
如何調用C語言寫的庫,如a.lib等,有對應的庫頭文件a.h。假設a.h中定義了函數:
int
WhyCoding(int
a,
float
b);
做法是,
/*
cpp_a.h
*/
extern
"C"
{
#include
"a.h"
}
或
/*
cpp_a.h
*/
extern
"C"
{
int
WhyCoding(int
a,
float
b);
/*
重定義所有的C函數
*/
}
從上面可以看出,extern
"C"
是用在C和C++之間的橋梁。之所以需要這個橋梁是因為C編譯器編譯函數時不帶
函數的類型信息,只包含函數符號名字,如C編譯器把函數int
a(float
x)編譯成類似_a這樣的符號,C連接器只要
找到了調用函數的符號,就可以連接成功,它假設參數類型信息是正確的,這是C編譯連接器的缺點。而C++
編譯器為了實現函數重載,編譯時會帶上函數的類型信息,如他把上面的a函數可能編譯成_a_float這樣的
符號為了實現重載,注意它還是沒有帶返回值得信息,這也是為什麼C++不支持採用函數返回值來區別函數
重載的原因之一,當然,函數的使用者對函數返回值的處理方式(如忽略)也是重要原因。
基於以上,C調用C++,首先需要用封裝函數把對C++的類等的調用封裝成C函數以便C調用,於是extern
"C"
的
作用是:讓編譯器知道這件事,然後以C語言的方式編譯和連接封裝函數.(通常是把封裝函數用C++編譯器按C++
方式編譯,用了extern
"C"
後,編譯器便依C的方式編譯封裝介面,當然介面函數裡面的C++語法還是按C++方式
編譯;對於C語言部分--調用者,還是按C語言編譯;分別對C++介面部分和C部分編譯後,再連接就可以實現C
調用C++了).
相反,C++調用C函數,extern
"C"
的作用是:讓C++連接器找調用函數的符號時採用C的方式,即使用_a而不是
_a_float來找調用函數。
㈧ c語言中函數調用有三種方法,能幫忙各舉個例子嗎
1、首先在打開的C語言資料庫中,輸入【#include】,如下圖所示。
㈨ 如何在C#中,在一個類里調用另外一個類的方法
如果要通過類名來用方法的話,那其中的方法必須是靜態方法,需加上static。即public static void get() {...}。靜態方法是跟類關聯的,允許不對classA實例化,就可以用它的方法。
把A類有引用的方法加static
public class A
public static void MethodA()//如果不是static 就要實例化才能調用
public class B
public void MethodB
A.MethodA();//第一種方式
如果MethodA()沒有加static關鍵字
則使用 new A().MethodA();
}
語言結構
類:一個基本的C#類中包含數據成員、屬性、構造器和方法。屬性可以是靜態或實例成員。在C#中類的聲明與C++和Java很相似。但是,不像C++,C#結構體與類是不支持繼承多個父類。但是,與Java相同的是,一個結構體可以實現介面(interface)。Java的關鍵字import已經被替換成using,它起到了同樣的作用。
以上內容參考:網路-c#