Linux C 结构体

结构体

在编程语言中,最基本的、不可再分的数据类型称为基本类型。例如:整型、浮点型;根据语法规则由基本类型组合而成的类型称为复合类型。例如:字符串是由很多字符组成。

double型组成的结构体:

struct complex_struct

{

     double x,y;

};

定义标识符complex_struct(遵循标识符的命名规则);是一个符合类型。同时还有另一种方式:

struct complex_struct

{

     double x,y;

} z1,z2;

类型定义是一种声明,声明都是以“;”号结尾。

例子:定义和访问结构体:

#include <stdio.h>
main(){
   struct complex_struct{double x,y;}z;
   double x=3.0;
   z.x=x;
   z.y=4.0;
   printf("struct value:z.x=%f z.y=%f\n",z.x,z.y);
}


结构体类型用在表达式中有很多限制,不想基本类型那么自由,例如:+、-、*、/等算术运算符和&&、 ||、!等逻辑运算符都不能作用于结构体类型,if语句、while语句中的控制表达式的值也不能是结构体类型。严格地说,可以做算术运算的类型称为算术类型,算术类型包括整型和浮点型,可以表示零和非零,可以参与逻辑与、或、非运算或者被控制。表达式的类型称为标量类型,标量类型包括算术类型和指针类型。

结构体变量之间使用赋值运算符是允许的,用一个结构体变量初始化另一个结构体变量也是允许的。例如:

struct complex_struct x1={3.0,4.01};

struct copmlex_struct z2=z1;

z1=z2;

既然结构体变量之间可以相互赋值和初始化,也就可以当作函数的参数和返回值来传递:

struct complex_struct add_complex(struct complex_struct z1.struct complex_struct z2)

{

   z1.x=z1.x+z2.x;

  z1.y=z1.y+z2.y;

  return z1;

}

结构体的三种方式:

第一种:

#include "stdafx.h"
struct Student 
{
	int num;
	char * name;
};
int _tmain(int argc, _TCHAR* argv[])
{
	struct Student stu;
	stu.num=1001;
	stu.name="赵五";
	printf("%d,%s\n",stu.num,stu.name);

	struct Student stu2;
	stu2.num=1002;
	stu2.name="钱六";
	printf("%d,%s\n",stu2.num,stu2.name);

	struct Student stu3;
	stu3.num=1003;
	stu3.name="孙七";
	printf("%d,%s\n",stu3.num,stu3.name);
        return 0;
}

第二种:

#include "stdafx.h"
struct Student 
{
	int num;
	char * name;
}stu,stu2,stu3;

int _tmain(int argc, _TCHAR* argv[])
{
	struct Student stu;
	stu.num=1001;
	stu.name="赵五";
	printf("%d,%s\n",stu.num,stu.name);

	struct Student stu2;
	stu2.num=1002;
	stu2.name="钱六";
	printf("%d,%s\n",stu2.num,stu2.name);

	struct Student stu3;
	stu3.num=1003;
	stu3.name="孙七";
	printf("%d,%s\n",stu3.num,stu3.name);
	return 0;
}

第三种:

#include "stdafx.h"
struct 
{
	int num;
	char * name
}stu,stu2,stu3;

int _tmain(int argc, _TCHAR* argv[])
{
	
	stu.num=1001;
	stu.name="赵五";
	printf("%d,%s\n",stu.num,stu.name);

	
	stu2.num=1002;
	stu2.name="钱六";
	printf("%d,%s\n",stu2.num,stu2.name);

	
	stu3.num=1003;
	stu3.name="孙七";
	printf("%d,%s\n",stu3.num,stu3.name);

	return 0;
}

结构体定义的学号,名字的书写:

#include "stdafx.h"
struct Student 
{
	int num;
	char * name;

	void show()
	{
		printf("我叫:%s 学号是:%d\n",name,num);
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	struct Student stu;
	stu.num=1001;
	stu.name="赵五";
	stu.show();

	struct Student stu2;
	stu2.num=1002;
	stu2.name="钱六";
	stu2.show();

	struct Student stu3;
	stu3.num=1003;
	stu3.name="孙七";
	stu3.show();

	return 0;
}

结构体定义的x,y轴的距离平方:

#include "stdafx.h"
struct Point
{
	int x;
	int y;
};
struct Line
{
	struct Point ok;
	struct Point res;

	void show()
	{
		printf("距离的平方:%d\n",(ok.x-res.x)*(ok.x-res.x)+(ok.y-res.y)*(ok.y-res.y));
	}
};

int _tmain(int argc, _TCHAR* argv[])
{
	/*struct Point ok;
	ok.x=10;
	ok.y=10;

	struct Point res;
	res.x=20;
	res.y=20;

	struct Line line;
	line.ok=ok;
	line.res=res;
	line.show();*/

	struct Line line;
	line.ok.x=10;
	line.ok.y=10;
	line.res.x=20;
	line.res.y=20;
	line.show();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值