本文共 890 字,大约阅读时间需要 2 分钟。
(1) 数组做函数参数,注意看注释:
#define _CRT_SECURE_NO_WARNINGS #include#include #include typedef struct Teacher { int age; char name[64];} Teach;void call(int array[]){ array[1] = 5; //这里会改变原来的值(原来为2,然后变成5),因为数组做函数参数的时候,会退化为指针,其会指向原来的地址,因此会改变。}int main1(){ int array[] = { 1,2,3 }; printf("%d \n", array[1]); //输出2 call(array); printf("%d \n",array[1]); //输出5 return 0;}
(2) 结构体做函数参数,注意看起注释,代码如下:
#define _CRT_SECURE_NO_WARNINGS #include#include #include typedef struct Teacher { int age; char name[64];} Teach;void call(Teach t){ t.age = 19; //这里并不能改变原来的值,理解这里的关键是理解c语言中的栈空间,堆空间,代码区,全局区}void call1(Teach *t){ t->age = 19; //这里改变了原来的值,因为这里是一个指针,哪怕是栈区间,也改变了其指向}int main(){ Teach t = { 12,"tgy" }; printf("%d\n", t.age); //输出12 call(t); printf("%d\n", t.age); //输出12 call1(&t); printf("%d\n", t.age); //输出19 return 0;}
转载地址:http://zqzmi.baihongyu.com/