C语言基础

    返回首页    发表留言
本文作者:李德强
          第二节 结构体与函数
 
 

        今天我们继续来学习关于结构体的相关知识。在上一节中我们已经知道,定义一个结构体就是在定义一个新的变量类型,只不过这个变量类型是由多个变量组合在一起的而已,也就是说定义了一个结构体变量,其实就是定义了多个普通变量的集合,而这个结构体变量可以像普通变量一样使用,甚至可能可以做为函数的参数或反回值。下面我们就来看一看关于结构体变量作为函数参数的例子:

#include <stdio.h>
#include <math.h>

typedef struct point_s
{
	float x;
	float y;
} point_s;

float distance(point_s p)
{
	return sqrt(p.x * p.x + p.y * p.y);
}

int main(int argc, char *argv[])
{
	point_s p;
	p.x = 3.2;
	p.y = 2.6;
	float dis = distance(p);
	printf("The distance is %4.2f\n", dis);

	return 0;
}

        在这里我们首先定义了一个结构体类型point_s,它有两个属性x和y,分别表示平面上一个点的横坐标和纵坐标,而我们又定义了一个函数distance()这个函数比较特殊,它的入参类型不是普通变量,而一个结构体变量,point_s p。我们讲过结构体类型变量与普通变量从本质上说并没有什么区别,所以结构体变量也同样可以作为函数的参数,使用结构体变量时,可以像普通变量一样直接使用其内部属性,例如sqrt(p.x * p.x + p.y * p.y)。其中p.x就是表示这个结构体变量p中的属性x,p.y就是表示这个结构体变量p中的属性y,这里面还用到了一个数学函数sqrt()表示求一个数的平方根。这样我们的distance()函数就可以根据传入参数来做相应的计算。也就是说,根据传入参数的点坐标,计算其与原点的距离,对点横纵坐标的平方和再求平方根。

        我们再来看一个例子,注意,我们在函数内部对结构体变量做修改时并不会影响到外部原变量的值,因为在函数内部所使用的这个结构体变量只是一个函数内部的局部变量,所以在函数内部修改其属性值,并不会应景到外部原变量,这与普通变量的作用域一致。例如:

#include <stdio.h> 
#include <math.h>

typedef struct point_s
{
	float x;
	float y;
} point_s;

void func(point_s p)
{
	p.x = 5.1;
	p.y = 6.7;
	printf("inside %4.2f %4.2f\n", p.x, p.y);
}

int main(int argc, char *argv[])
{
	point_s p;
	p.x = 3.2;
	p.y = 2.6;
	func(p);
	printf("inside %4.2f %4.2f\n", p.x, p.y);

	return 0;
}

inside 5.10 6.70
inside 3.20 2.60

 

        下面我们再来看看结构体变量做函数的返回值的情况。当然,结构体变量作函数的返回值情况与普通变量做函数值的返回值的使用方法一致的,例如:

#include <stdio.h> 
#include <math.h>

typedef struct point_s
{
	float x;
	float y;
} point_s;

point_s middle(point_s p1, point_s p2)
{
	point_s mid;
	mid.x = (p1.x + p2.x) / 2;
	mid.y = (p1.y + p2.y) / 2;
	return mid;
}

int main(int argc, char *argv[])
{
	point_s p1;
	p1.x = 3.2;
	p1.y = 2.6;
	point_s p2;
	p2.x = 4.2;
	p2.y = 3.3;
	point_s pmid = middle(p1, p2);
	printf("%4.2f %4.2f\n", pmid.x, pmid.y);

	return 0;
}

3.70 2.95
    返回首页    返回顶部
  看不清?点击刷新

 

  Copyright © 2015-2018 问渠网 辽ICP备15013245号