1. 程式人生 > 其它 >函式傳遞的引數型別

函式傳遞的引數型別

傳值(不改變實參的值)

  • 數值(整型、浮點型、字元) 作為引數(傳數)
code
#include <stdio.h>
void func(int i);
int main(){
	int num = 100; 
	func(num);//num實參 
    printf("%d\n",num);//100 
	return 0;
}
void func(int i){//i形參 
	i = 200; 
}
  • 結構 作為引數(傳結構)
code
#include <stdio.h>
struct Book{
   int id;
};
void func( struct Book book2 );
int main( ){
   struct Book book1;
   book1.id = 100;
   func( book1 );//傳的是值,不是引用,不能改變其值 
   printf("%d\n",book1.id); //100
   return 0;
}
void func( struct Book book2 ){
   book2.id = 200;
}

傳引用(改變實參的值)

  • 數值指標(整型、浮點型、字元)作為引數(傳數)
code
#include <stdio.h>
void func(int *i);
int main(){
	int num = 100; 
	func(&num);//num實參 
    printf("%d\n",num);//200 
	return 0;
}
void func(int *i){//i形參 
	*i = 200; 
}
  • 陣列名==指向陣列的指標 作為引數(傳陣列)
code
#include <stdio.h>
void func(int i[]);//方式1 
//void func(int *i);//方式2 
int main(){
	int num[3] = {111,222,333}; 
	func(num);//num實參 
    printf("%d\n",num[1]);//666
	return 0;
}

//void func(int i[])
void func(int *i)
{//i形參 
	 i[1]=666;
}
  • 指向結構體的指標 作為引數(傳結構體)
code
#include <stdio.h>
struct Book{
   int id;
};
void func( struct Book *book2 );
int main( ){
   struct Book book1;
   book1.id = 100;
   func( &book1 );//傳的是值,不是引用,不能改變其值 
   printf("%d\n",book1.id); //200
   return 0;
}
void func( struct Book *book2 ){
   book2->id = 200;
}
  • 函式名作為引數(傳函式)
code
#include <stdio.h>
void func(int n,void (* add)(int i));
void add_1(int i);//數值加1 
void add_2(int i);//數值加2 
int main(){
	int num = 100; 
	//func(num,add_2);//方式1 
	func(num,&add_2);// 方式2 
	return 0;
}
void func(int n,void (* add)(int i)){ 
	 // 會執行add_2 
	 //(*add)(n);//方式1
	 add(n);//方式1
} 
void add_1(int i){
	i += 1;
	printf("執行的是add_1函式,數值變為%d\n",i);//101 
} 
void add_2(int i){
	i += 2;
	printf("執行的是add_2函式,數值變為%d\n",i);//102 
}