函式傳遞的引數型別
阿新 • • 發佈:2021-11-17
傳值(不改變實參的值)
- 數值(整型、浮點型、字元) 作為引數(傳數)
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
}