传值(不改变实参的值)
code
#include
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
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
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
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
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
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
}