C语言复习——参数传递和结构体

在C语言中,函数的参数分为实参和形参,参数传递方式分为值传递和地址传递

先来说说值传递,这种传递方式是使用变量,常量,数组元素作为函数参数,实际上是将实参的值复制到形参相应的存储单元中,即实参和形参分别占用不同的存储单元,这种传递方式称为“参数的值传递”或者“函数的传值调用”。值传递的特点是单向传递,即主调函数调用时给形参分配存储单元,把实参的值传递给形参,在调用结束后,形参的存储单元被释放,而形参值的任何变化都不会影响到实参的值,实参的存储单元仍保留并且维持数值不变。

#include<stdio.h>
void fun(int x,int y)
{
	int temp;
	temp=x;
	x=y;
	y=temp;
	printf("x=%d,y=%d\n",x,y);
 }
int main()
{
	int a=13,b=15;
	fun(a,b);
	printf("x=%d,y=%d\n",a,b);
 } 

这个是值传递的调用示例,结果是输出x=15,b=13,a=13,b=15。x,y是形参,形参的数值改变,而实参a,b的数值不会因为形参的改变而改变,就是因为形参和实参的存储单元不同。

地址传递:这种方式是使用数组名或者指针作为函数参数,传递的是该数组的首地址或者是指针的值,而形参接收到的是地址,即指向实参的存储单元,形参和实参占用相同的存储单元,这种传递方式称为“参数的地址传递”。

地址传递的特点是形参并不存在存储空间,编译系统不为形参分配内存。数组名或指针就是一组连续空间的首地址,因此在数组名或指针作为函数参数是所进行的传送只是地址传送,形参在取得该首地址后,与实参共同拥有一段内存空间,形参的变化也就是实参的变化。

#include<stdio.h>
void fun(int *x,int *y)
{
	int temp;
	temp=*x;
	*x=*y;
	*y=temp;
	printf("x=%d,y=%d\n",*x,*y);
 }
int main()
{
	int a=13,b=15;
	fun(&a,&b);
	printf("x=%d,y=%d\n",a,b);
 }

这个运行结果就是x=15,y=13,a=15,b=13。因为实参和形参拥有相同的存储单元。

这个在当时学习c语言的时候还不懂为什么是这样,现在回顾c的知识之后才深刻了解了参数传递的含义。

下面是结构体,结构体的大致含义我是知道的,但是在运用方面还是不太熟练,就再复习复习。

结构体的格式:

struct 结构体名
{
    数据类型表示符  结构体成员名;
}

结构体变量的定义:结构体变量同其他变量一样也必须先定义后使用,结构体变量定义要按照结构体说明中的结构体类型,为被定义的结构体变量分配内存单元,而结构体说明不分配内存。

结构体成员的引用:用结构体成员运算符“.”引用结构体成员格式,若定义了指向结构体的指针变量,也可以用->来引用成员。如:

struct student
{
    char name[20];
    int age;
    char xh;
    int score;
}

如果定义结构体变量:struct student stu1;  struct student *stu2;  stu2=&stu1;则stu1.name,(*stu2).name,stu2->name这三种引用成员的方式等价。

还有一个要注意的问题就是结构体变量的初始化,结构体变量只可整体初始化,不可整体赋值,也不能直接在结构体成员中对成员赋初值,但结构体变量间可以相互赋值。

还有typedef这个保留字,用typedef定义数据类型就是给已存在的数据类型重新命名一个新名字。

例如:

typedef struct student
{
    char name[20];
    int age;
}stu;

在定义结构体变量的时候就可以  stu stu1;  stu  *stu2;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值