C语言学习笔记:22_结构体

原创 2015年07月09日 21:04:28
/*
 * 22.结构体.c
 *
 *  Created on: 2015年7月9日
 *      Author: zhong
 */
#include <stdio.h>
#include <stdlib.h>

/**
 * 结构体:对共性数据的封装
 * 结构体有点使用面向对象的思想,对一类东西的共性进行封闭,以便使用。
 *
 *	定义结构体:
 *	//1>定义结构体,也可以定义在函数中(全局与局部的结构体)
	 struct Person{
		 char *name;// 字符串
		 int age;
		 double hiegth;
	 }; //有分号结尾

	2>:定义一个结构体时并创建一个结构体变量
	struct Person {
		char *name; // 字符串
		int age;
		double hiegth;
	} p;

	3>:没有名字的结构体,只能使用一次
	struct {
		char *name; // 字符串
		int age;
		double hiegth;
	} p;
 *
 */

//---------结构体的基本定义与使用-----------------------------------
//定义结构体,也可以定义在函数中(全局与局部的结构体)
struct Person {
	char *name; // 字符串
	int age;
	double hiegth;
};
//有分号结尾

void use_struct() {
	//创建构造体变量
	struct Person p = { "zhong", 18, 159.0 }; //创建构造体时并赋初值(只有在创建时才可以使用{}赋值)
	p.age = 19;
	p.hiegth = 170.0; //可以使用变量名.结构体的字体名引用结构体中的数据段


	printf("%d\n", sizeof(p.name)); //4   指针4个字节
	printf("%d\n", sizeof(p.age)); //4
	printf("%d\n", sizeof(p.hiegth)); //8
	printf("%d\n", sizeof(p)); //结构体的总大小 :16   4+4+8  各字段之和(计算出的和要是只大字段的陪数,不够保够:)
							   //如: 结构体中最有 int age, char c;现个字段 ,它们的总字节应该是 4+1=5。
							   //因为不是4的陪数,所以补够8,输出结构体的大小 为8
	printf("p p.age=%d,p.name=%s,p.hiegth=%f\n", p.age, p.name, p.hiegth);
}
//----------结构体的嵌套定义------------------------
/**
 * 结构体的嵌套定义,就是一个结构体包含另一个结构体:
 * 例如:使用结构体Date来封装日期数据
 * 	        使用person_来封装一个人的信息,人的信息有生日,生日是一个日期,可以用上面定义的结构体Date来定义
 */
//使用结构体Date来封装日期数据
struct Date{
	int year; //年
	int month; //月
	int day; //日
};
// 使用person_来封装一个人的信息
struct Person_{
	char *name;//性名
	struct Date birthday;
};

//测试
void n_struct(){

	//定义结构体Person_的变量,并初始化
	struct Person_ p={"zhong",{2015,7,9}};

	//访问结构体中结构体的数据
	printf("p.birthday.year=%d\n",p.birthday.year);

	p.birthday.year=2016; //修改数据
	printf("p.birthday.year=%d\n",p.birthday.year);

}

//------结构体数组-----------------------------
void struct_array(){

	//定义结构体数组和定义普通数组一样,都是"类型名  变量名[大小]"
	struct Person persons[10]={ //定义结构体数组时并赋值
			{"zhong1",18,174.0},
			{"zhong2",19,175.0},
			{"zhong3",20,176.0}
	};

	//读取一个结构体并复制给变量p,修改p中的数据,数组中的数组不受影响
	struct Person p=persons[0];
	p.age=20;//修改p中的数据,数组中的数组不受影响
	int age=p.age;//读取数据
	printf("p p.age=%d,p.name=%s,p.hiegth=%f\n", p.age, p.name, p.hiegth);

	//直接用数组下标引用字段,这样修改数据时,才会修改数组中的数据
		persons[0].age=20;
	//	int age=persons[0].age;

	//遍历输出
	int i;
	for(i=0;i<3;i++){
	struct Person p=persons[i];
	printf("p p.age=%d,p.name=%s,p.hiegth=%f\n", p.age, p.name, p.hiegth);
	}
}
//-------指向结构体的指针-----------------------
void p_struct(){
	//定义一个结构体
	struct Student{
		int id;
		int age;
	};

	//定义一个结构体变量存放结构体
	struct Student s={01,19};

	//定义一个结构体指针(把struct Student看成一个整体,一种类型),并指向结构体变量s
	struct Student *p=&s;

	//利用指针修改数据,下面两个方式都可以
	 (*p).id=2;
	  p->id=3;

	//利用指针访问结构体
	printf("s.id=%d,s.age=%d\n",(*p).id,(*p).age);
	//也可以写成这个样子
	printf("s.id=%d,s.age=%d\n",p->id,p->age);//p前面不用加 *  ,用eclipse编写代码时,只要p.age,就会自动变成 p->age
	//当然还可以写成这样
	printf("s.id=%d,s.age=%d\n",s.id,s.age);//p前面不用加 *  ,用eclipse编写代码时,只要p.age,就会自动变成 p->age

}

int main() {
//	use_struct();

//	struct_array();

//	p_struct();

	n_struct();

//	int a=1;
//	int *p=&a;
//	printf("%p\n",&a);//28ff44
//	printf("%p\n",p);//28ff44

	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言学习笔记(22结构体综合应用学生信息管理)

#include #include #include void PutInFun(struct Student * pArr,int len); void OutPutFun(struct St...

C语言中的位运算&结构体浅析 — <编程之美>1.2学习笔记

引子问题: 中国象棋将帅问题:在一把象棋的残局中,象棋双方的将帅不可以相见,即不可以在中间没有其他棋子的情况下在同一列出现。而将、帅各被限制在己方的3*3的格子中运动。相信大家都非常熟悉象棋的玩法吧,...

【黑马程序员】C语言学习笔记之结构体(十二)

--------------------------------------------IOS期待与您交流!-------------------------------------------- 一...
  • kqygww
  • kqygww
  • 2014-03-17 09:34
  • 1065

黑马程序员-ios学习笔记 c语言 结构体

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------   构造类型定义: 由一个或者多个已定义类型的元素用构造的方法,构造新的类型   构造类型分...

C语言结构体学习笔记

====================================================================================================...

C语言学习笔记-结构体、共用体、枚举

枚举类型的定义形式为: enum typeName{ valueName1, valueName2, valueName3, ...... }; 注意最后的;不能少。 列出一个星期有几天: ...

c语言学习笔记(10)——结构体

------------------------------------------------------------------ # include struct Student{  //S...

C语言学习笔记 之 结构体指针变量

http://zhaoyuqiang.blog.51cto.com/6328846/1292014 C语言学习笔记 之     结构体指针变量 一提指针,那可是C语言的核心了,有多少学子曾拜倒在...

C语言学习笔记(21结构体)

1、通过函数完成对结构体变量的输入和输出 /* 通过函数完成对结构体变量的输入和输出 */ #include #include #include //定义一个结构体类型 struct S...

c语言学习笔记之结构体和枚举

结构体1、基本概念构造类型:由已有的数据类型构成类型 数组:多个同种类型的数据构成的那么一种类型 特点:只能存放一种数类型 结构体:从来存放表示某种特定含义的一组数据 它是对数据封装...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)