#include<stdio.h>
struct sk{
int b[3]={1,2,3};
}data;
void change1(struct sk a);
void change2(char a[]);
void change3(int c[]);
int main(void){
change1(data);
char a[]={"abc"};
printf("%d\n",data.b[1]);
change2(a);
printf("%s",a);
change3(data.b);
printf("%d",data.b[1]);
}
void change1(struct sk a){
a.b[1]=123;
}
void change2(char b[]){
b[1]='f';
}
void change3(int c[]){
c[1]=123;
}
结果是change1无效,change2有效
实际上
change1使用的是值传参,会把整个结构体变量复制一份(即使里面有数组)
change2与change3(对于数组)使用的是地址传递,因此可以改变
第一种和第三种情况不可混淆