C中结构体使用_c 结构体中使用结构体-程序员宅基地

技术标签: C  初始化  结构体  拷贝  指针  

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
1、结构体类型定义
2、结构体变量定义
3、结构体变量的初始化
4、typedef改类型名
5、点运算符和指针法操作结构体
6、结构体也是一种数据类型,复合类型,自定义类型
*/

//1、结构体类型定义
//struct关键字
//struct Teacher合一起才是类型
//{}后面有分号
struct Teacher
{
    
	char name[50];
	int age;
};

//2、结构体变量定义
//1.先定义类型,再定义变量(常用)
struct Teacher t1; //全局变量


//2. 定义类型同时定义变量
struct Teacher2
{
    
	char name[50];
	int age;
}t3 = {
    "tom", 66};

struct
{
    
	char name[50];
	int age;
}t5;

//3、结构体变量的初始化
//定义变量时直接初始化,通过{}
struct Teacher t7 = {
     "lily", 18 };

//4、typedef改类型名
typedef struct Teacher3
{
    
	char name[50];
	int age;
}Teacher3;

struct Teacher3 t8;
Teacher3 t9;

int main(void)
{
    
	//1.先定义类型,再定义变量(常用)
	struct Teacher t2; //局部变量

	printf("%s, %d\n", t7.name, t7.age);

	//5、点运算符和指针法操作结构体

	/*
	struct Teacher
	{
		char name[50];
		int age;
	};
	*/
	strcpy(t2.name, "xiaoming");
	t2.age = 22;
	printf("%s, %d\n", t2.name, t2.age);

	//结构体指针变量,没有指向空间,不能给其成员赋值
	struct Teacher *p = NULL;
	p = &t2;
	strcpy(p->name, "xiaojiang");
	p->age = 22;
	printf("%s, %d\n", p->name, p->age);

	return 0;
}

可以在栈上分配内存,可以在堆上分配内存

#define  _CRT_SECURE_NO_WARNINGS 
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

typedef struct Teacher
{
    
	char name[64];
	int age ;
	int id;
}Teacher;

void printTeacher(Teacher *array, int num)
{
    
	int i = 0;
	if(array == NULL)
		return ;
	
	for (i=0; i<num; i++)
	{
    
		printf("age:%d \n", array[i].age);
	}
}

void sortTeacer(Teacher *array, int num)
{
    
	int		i,j;
	Teacher tmp;

	for (i=0; i<num; i++)
	{
    
		for (j=i+1; j<num; j++)
		{
    
			if (array[i].age > array[j].age)
			{
    
				tmp = array[i];  
				array[i] = array[j];
				array[j] = tmp;
			}
		}
	}
}

#if 0

// 结构体数组 输入老师的年龄,排序
int main(int argc, const char * argv[])
{
    
	int			i = 0;
	Teacher		Array[3];  //在stack 分配内存
	int			num = 3;

	for (i=0; i<num; i++)
	{
    
		printf("\nplease enter age:");
		scanf("%d", &(Array[i].age) );
	}

	printTeacher(Array, num);

	sortTeacer(Array, num);

	printf("排序之后\n");

	printTeacher(Array, num);

	return 0;
}

#else

Teacher * createTeacher(int num)
{
    
	Teacher * tmp = NULL;
	tmp = (Teacher *)malloc(sizeof(Teacher) * num); //	Teacher		Array[3]
	if (tmp == NULL)
	{
    
		return NULL;
	}
	return tmp; 

}

void FreeTeacher(Teacher *p)
{
    
	if (p != NULL)
	{
    
		free(p);
		p = NULL;
	}

	return ;
}

int main(int argc, const char * argv[]) 
{
    
	int			i = 0;
	int			num = 3;
	Teacher *pArray = NULL;
	pArray = createTeacher(num);

	for (i=0; i<num; i++)
	{
    
		printf("\nplease enter age:");
		scanf("%d", & (pArray[i].age) );
	}

	printTeacher(pArray, num);

	sortTeacer(pArray, num);

	printf("排序之后\n");

	printTeacher(pArray, num);

	FreeTeacher(pArray);

	return 0;
}

#endif

测试结果

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zxy131072/article/details/107635971

智能推荐

Linux 常见特殊符号-程序员宅基地

文章浏览阅读78次。[size=large][b]1,> 重定向输出符号 用法:命令 >文件名 特性:覆盖(当输入文件和输出文件是同一文件,文 件内容被清空;不适合连续重定向) 典型应用:合并文件(cat a b >c);清空文件(cat /dev/null);文件打印2,>> 重定向输出符号 用法:命令 >>文..._linux不同字体下的¥

DXF格式文件导入AD,做成可加工的PCB文件_ad怎么根据dxf文件绘制pcb-程序员宅基地

文章浏览阅读2.4k次。DXF文件导入AD注意事项也可以导入到KEEPOUT或者机械层对于有问题,可以tool菜单,reset,对于导入绿色是报错,相当于线宽不满足规则,没有改变线宽,默认为10mil=0.0127mm_ad怎么根据dxf文件绘制pcb

如何通过CanApe进行变量的测量和标定_canape怎么添加标定量-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏11次。1、展开对应Device下的A2L文件,可见下面的测量量和标定量2、点击Start->测量设置3、将 测量量 尽量平均的分配到各个XCP Event中。添加方法如下双击需要添加的测量量即可添加到对应的Xcp Event中4、回到主界面,按如下方法将测量量添加到图形化窗口中,然后start5、右键,将图形调整到合适大小如下图所示。_canape怎么添加标定量

基于角色、标记及BLP模型的多级访问控制-B/S架构OA系统应用_blp规则 权限控制-程序员宅基地

文章浏览阅读4.1k次。 福建电脑2007年第2期 基于角色、标记及BLP模型的多级访问控制—B/S架构OA系统应用(桂林电子科技大学 计算机系,广西桂林 541004 ) 摘 要: 本文基于BLP模型的安全性和角色访问模型的简便性,结合两者优点,克服其缺点。根据办公自动化(OA)系统的实际情况设计一种新的模型。BLP模型的读写分离,角色可以授权和回收,角色层次机制,标记等保证信息_blp规则 权限控制

libapr-1.so.0:对‘uuid_generate@UUID_1.0’未定义的引用问题解决_undefined reference to `uuid_generate-程序员宅基地

文章浏览阅读2.3k次,点赞8次,收藏29次。在ros项目编译的过程中,有时会出现/usr/lib/x86_64-linux-gnu/libapr-1.so.0: undefined reference to `uuid_generate@UUID_1.0’的错误。经查找原因发现是都是由于ros和anaconda的兼容问题引起的,ros编译出现这种错误均可用该套路解决。问题解决过程:1、从报错中提取两个关键字:这里为libapr-1.so.0和uuid2、查找以上两个库在电脑中的位置:locate libapr-1.so.0显示结果/usr_undefined reference to `uuid_generate

ov5640_mipi.c分析_ov5640怎么设置mipi输出-程序员宅基地

文章浏览阅读2.3w次,点赞12次,收藏78次。在ov5640芯片手册中看到这样一句话:The OV5640 supports both a digital video parallel port and a serial MIPI port.所以ov5640既支持数字并口视频传输,同样支持mipi接口规范。摄像头插入到开发板上面的时候,如果有匹配的驱动程序,就会调用到probe函数,先从probe函数来分析。(_ov5640怎么设置mipi输出

随便推点

php如何采集动态页生成的静态数据,PHP-php如何实现自动生成静态页 或提供思路...-程序员宅基地

文章浏览阅读51次。require_once(“db.php”);$title=$_POST[“title”];$content=$_POST[“content”]; //获得表单变量//以下建立一文本文档,其值自动计数$countfile="count.txt";if(!file_exists($countfile)){fopen($countfile,"w"); //如果此文件不存在,则自动建立一个}$fp=fo..._$title = $_post['title']; $content = $_post['content'];

QT——在已经安装配置好QT的情况下如何更新QT的组件_已安装的qt怎么更新安装组件。离线版qt安装-程序员宅基地

文章浏览阅读1.6k次。(一)找QT在线安装镜像地址1、打开 http://download.qt.io/static/mirrorlist/,这里面是各国的镜像站点2、我选了清华的站点,点HTTP3、按下面的路径进入qt文件夹online/qtsdkrepository/windows_x86/root/qt/ 然后就在下图这个界面复制当前地址(二)QT更新组件的设置是不能在QT里面直接找到的,需要用到MaintenanceTool.exe文件,这个文件就在你安装QT的路径下面,如下图所示..._已安装的qt怎么更新安装组件。离线版qt安装

计算机视觉论文_jain a k, duin r p w, mao j. statistical pattern r-程序员宅基地

文章浏览阅读3.6k次。找到了一个很好的博客,作者很详尽的总结了一系列有深刻影响的计算机视觉方面的论文,希望有更多的人能够看过这些经典的论文。在此转载改博客,在此向水木上表示深深的敬意,只有有更多像这样善于总结和分享的人才能给我们更好的网络学习环境。前言:最近由于工作的关系,接触到了很多篇以前都没有听说过的经典文章,在感叹这些文章伟大的同时,也顿感自己视野的狭小。 想在网上找找计算机视觉界的经典文章汇总,一_jain a k, duin r p w, mao j. statistical pattern recognition: a review[j]. i

未能正确加载包DataWareHouse VSIntegration layer"_datawarehouse vsintegration layer ({4a0c6509-bf90--程序员宅基地

文章浏览阅读819次。未能正确加载包DataWareHouse VSIntegration layer" 的解决方法:将C:\Program Files\Microsoft Visual Studio 8\Common7\IDE 中的文件COPY道安装VS2005中的IDE中就可以了。_datawarehouse vsintegration layer ({4a0c6509-bf90-43da-abee-0aba3a8527f1})未

Eclipse 单个项目 全局搜索_eclipse 只搜索一个项目-程序员宅基地

文章浏览阅读998次。_eclipse 只搜索一个项目

信息学奥赛C++语言:三位数的求和_对于一个任意的三位自然数 x ,编程计算其各个数位上的数字之和 s 。 输-程序员宅基地

文章浏览阅读3.6k次。【题目描述】对于一个任意的三位自然数X,编程计算其各个数位上的数字之和S。【输入】输入一行,只有一个整数x(100<=x<=999)【输出】输出只有一行,包括1个整数。【输入样例】123【输出样例】6代码#include<cstdio>using namespace std;int main(){ int ge,shi,bai,n; ..._对于一个任意的三位自然数 x ,编程计算其各个数位上的数字之和 s 。 输

推荐文章

热门文章

相关标签