C语言结构体(这一篇就够了)

这篇具有很好参考价值的文章主要介绍了C语言结构体(这一篇就够了)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、结构体变量

1.含义

2.一般形式:

3.结构体类型变量的定义方法

4.结构体的初始化

6.结构体成员的访问:

二、结构体指针:

1.概念

2.定义

3.使用

三、结构体数组:

1.概念

2.定义

3.使用

三、结构体指针数组:

1.概念

2.定义

3.使用


一、结构体变量

1.含义

是一种构造数据类型 ,可以用于存储多个 不同类型的数据 ,在内存中连续存放。

2.一般形式:

 struct  结构体名
    {
     数据类型   成员名1;
     数据类型   成员名2;
     :
     数据类型   成员名n;
     };

一个结构体中的一个数据称作结构体的一个成员

比如说描述一个人:基本特征为姓名、性别、身高、体重

(1)定义一个结构体类型:struct  + 结构体名,就以人为例,姓名 :博主 ,性别 :男  ,身高 :180 ,体重 :140 

struct human
   {
           char name[20];
           char sex[10];
           int height;
           int weight;
   };

3.结构体类型变量的定义方法

 (1)先定义结构体类型再定义变量名
     这是C语言中定义结构体类型变量最常见的方式

 struct 结构体名
     {
             成员列表;
     };
     struct 结构体名 变量名;

    Example:
    定义几个变量:

struct human
   {
           char name[20];
           char sex[10];
           int height;
           int weight;
   };
struct human human1,human2; 

 (2)在定义类型的同时定义变量
     这种形式的定义的一般形式为:

struct 结构体名
        {
                  成员列表;
        }变量名; 


    Example:

struct human
   {
           char name[20];
           char sex[10];
           int height;
           int weight;
   } human1,human2;   

(3)定义结构体类型别名

1)方法一

 typedef  struct  结构体名  别名

例如:

  typedfe struct human  human;

2)方法二

在定义结构体类型时就进行别名定义

 typedef  struct 结构体名
        {
                  成员列表;
        }别名; 

例如:

 typedef  struct human
   {
           char name[20];
           char sex[10];
           int height;
           int weight;
   } human;

4.结构体的初始化

(1)与其他类型变量一样,也可以给结构体的每个成员赋初值,这称为结构体的初始化。一种是在定义结构体变量时进行初始化,语法格式如下:

struct  结构体名 变量名={初始数据表};

例如:

1)结构体成员的读操作

struct human  human1={"博主","男",180,140};

注:方法一仅用于读取

2)字符串拷贝 ,结构体成员的写操作

strcpy(human1.name," 博主");
strcpy(human1.sex = "男");

注:使用strcpy时记得加头文件#include<string.h>


(2)另一种是在定义结构体类型时进行结构体变量的初始化。

  struct  结构体名
        {
                成员列表;
        }变量名={初始数据表};

例如:

struct human
   {
           char name[20];
           char sex[10];
           int height;
           int weight;
   } human1={"博主","男",180,140};       

6.结构体成员的访问:

结构体变量.成员名

例如:

human1.name

human.sex

human.height

human.weight

 Example:

#include<stdio.h>
#include<string.h>
struct human
{
	char name[20];
	char sex[10];
	int height;
	int weight;
};
int main()
{
	struct human human1={"博主","男",180,140};
	//strcpy(human1.name,"李");
	//strcpy(human1.sex,"女");
	printf("name=%s\n",human1.name);
	printf("sex=%s\n",human1.sex);
	printf("height=%d\n",human1.height);
	printf("weight=%d\n",human1.weight);
	return 0;
}

二、结构体指针:

1.概念

         可以设定一个指针变量用来指向一个结构体变量。此时该指针变量的值是结构体变量的起始地址,该指针称为结构体指针。
         结构体指针与前面介绍的各种指针变量在特性和方法上是相同的。与前述相同,在程序中结构体指针也是通过访问目标运算“*”访问它的对象。

2.定义

struct 结构体名  *结构指针名;

对于上一节中定义的结构体类型struct human,
            可以说明使用这种结构体类型的结构指针如下:
            struct human *p;

3.使用

结构体指针 -> 成员名;

例如,结构体指针p指向的结构体变量中的成员name可以表示如下:
            (*p).name 或 p->name

#include<stdio.h>
#include<string.h>
struct human
{
	char name[20];
	char sex[10];
	int height;
	int weight;
};
void show(struct human *p)
{
	printf("name=%s\n",p->name);
	printf("sex=%s\n",p->sex);
	printf("height=%d\n",p->height);
	printf("weight=%d\n",p->weight);
}
int main()
{
	struct human human1={"博主","男",180,140};
	//strcpy(human1.name,"李");
	//strcpy(human1.sex,"女");
	//printf("name=%s\n",human1.name);
	//printf("sex=%s\n",human1.sex);
	//printf("height=%d\n",human1.height);
	//printf("weight=%d\n",human1.weight);
	show(&human1);
	return 0;
}

三、结构体数组:

1.概念

一个数组 其元素是 结构体

2.定义

定义结构体数组的方法和定义结构体变量的方法相仿,只需说明其为数组即可。

还是以上面定义的人的结构体为例

如:struct human arr[2]={human,human2};

#include<stdio.h>
#include<string.h>
struct human
{
	char name[20];
	char sex[10];
	int height;
	int weight;
};
void show(struct human *p)
{
	printf("name=%s\n",p->name);
	printf("sex=%s\n",p->sex);
	printf("height=%d\n",p->height);
	printf("weight=%d\n",p->weight);
}
int main()
{
	struct human human1={"博主","男",180,140};
	struct human human2={"小七","女",160,80};
	struct human arr[2]={human1,human2};
	//当我们要读取第一个成员时
	show(&arr[0]);
	//strcpy(human1.name,"李");
	//strcpy(human1.sex,"女");
	//printf("name=%s\n",human1.name);
	//printf("sex=%s\n",human1.sex);
	//printf("height=%d\n",human1.height);
	//printf("weight=%d\n",human1.weight);
	//show(&human1);
	return 0;
}

3.使用

 以上面定义的结构体数组arr[2]为例说明对结构体数组的引用:    
      1)引用某一元素中的成员。

  若要引用数组第二个元素的name成员,则可写为:         
               arr[1].name


     2)可以将一个结构体数组元素值赋给同一结构体类型的数组中的另一个元素,或赋给同一类型的变量。

如:
            struct  human[3],student1;
        现在定义了一个结构体类型的数组,它有3个元素,又定义了一个结构体类型变量student1,则下面的赋值是合法的。
            student1=human[0];
            human[0]=human[1];
            human[1]=student1; 


     3)不能把结构体数组元素作为一个整体直接进行输入输出。如:

  printf(“…”,human[0]);
            或
            scanf(“…”,&human[0]);
            都是错误的。
        只能以单个成员为对象进行输入输出,如:
            scanf(“…”,human[0].name);
            scanf(“…”,&human[1].height);    
            printf(“…”,human[0].weight);
            printf(“…”,human[1].sex);

三、结构体指针数组:

1.概念

一个数组 其元素是 结构体指针

2.定义

同上结构体指针一致,还是以上面定义好的human结构体给大家举个例子

如:struct human *arr[2]={&human,&human2};

3.使用

struct human *a[2]={&human1,&human2};

定义了一个结构体数组指针
    show(a[1]);打印

我们直接上代码文章来源地址https://www.toymoban.com/news/detail-416549.html

#include<stdio.h>
#include<string.h>
struct human
{
	char name[20];
	char sex[10];
	int height;
	int weight;
};
void show(struct human *p)
{
	printf("name=%s\n",p->name);
	printf("sex=%s\n",p->sex);
	printf("height=%d\n",p->height);
	printf("weight=%d\n",p->weight);
}
int main()
{
	struct human human1={"博主","男",180,140};
	struct human human2={"小七","女",160,80};
	struct human arr[2]={human1,human2};
	struct human *a[2]={&human1,&human2};
	//当我们要读取第一个成员时
	show(&arr[0]);
	show(a[1]);
	//strcpy(human1.name,"李");
	//strcpy(human1.sex,"女");
	//printf("name=%s\n",human1.name);
	//printf("sex=%s\n",human1.sex);
	//printf("height=%d\n",human1.height);
	//printf("weight=%d\n",human1.weight);
	//show(&human1);
	return 0;
}

到了这里,关于C语言结构体(这一篇就够了)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript的选择结构你真的了解吗?(看完这一篇就够了)

    ​🌈个人主页:前端青山 🔥系列专栏:JavaScript篇 🔖 人终将被年少不可得之物困其一生 依旧 青山 ,本期给大家带来JavaScript篇专栏内容:JavaScript-选择结构 目录 选择结构 实现选择结构的语句 三元(目)运算符 案例 判断一个年份是闰年还是平年 判断一个数是偶数还是奇数

    2024年02月04日
    浏览(16)
  • 【C语言之 CJson】学CJson看这一篇就够了

    CJSON 是一个轻量级的、用于处理 JSON 数据的 C 语言库。它提供了简单而直观的 API,使得在 C 程序中处理 JSON 数据变得相对容易。在本文中,我们将介绍 CJSON 的基本使用,包括如何创建 JSON 对象、解析 JSON 字符串、访问 JSON 数据以及释放相关资源。 打开这个链接:CJson下载 可

    2024年01月18日
    浏览(26)
  • Linux rm命令详解,Linux删除文件目录(非常详细)从零基础入门到精通,看完这一篇就够了。

    一、常用操作 1. 删除文件 2. 删除目录 二、其他操作 作用:删除文件或目录 参数: -f 直接删除,不需要确认。 -r 递归删除(用来删除目录) -i 删除前逐一询问。 -v 显示步骤 -d 只删除空目录 1)rm 后面直接跟文件名,可以删除文件,删除前会询问是否删除(y确认,n取消)

    2024年02月06日
    浏览(28)
  • 双目、结构光、tof,三种深度相机的原理区别看这一篇就够了!

    编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 Hello,大家好,这里是OAK中国,我是助手君。 最近刷知乎看到这样一个问题👇 碰巧B站也有朋友在问这种类似的问题,我寻思刚开始接触深度相机

    2024年02月09日
    浏览(20)
  • getchar函数详解看这一篇就够了-C语言(函数功能、使用、返回值)

    首先要明确getchar的功能是:从计算机终端(一般是键盘)输入一个字符,其值就是输入得到的字符。 目录 getchar函数简介 getchar函数执行过程详解(配图)  getchar用法示例 解释一下:while ((ch=getchar()) != \\\'EOF\\\') 函数原型:int getchar(void);                                 返回

    2024年02月07日
    浏览(27)
  • 如何学习及计算机编程,入门看这一篇就够了---以c语言为例

    用计算机爬取信息(爬虫) 进行数据分析,数据可视化(大数据的某个方面) 处理海量的数据,如excel(百万条数据) example1. 来看下面一段代码 大家一定会说 这太简单了 输出hello world 学习计算机的入门程序嘛!! 那么请问 这是什么?我们第一次编程应该不会知道这是什

    2024年02月08日
    浏览(22)
  • strstr函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )

     strstr()函数用于:查找子字符串 目录 函数介绍 用法示例 函数讲解 实现函数  事例展示 函数声明:char *strstr(const char *str1, const char *str2) 头  文  件:#include string.h 返  回  值: 返回值为char * 类型( 返回指向  str1  中第一次出现的  str2  的指针);如果  str2  不是 

    2024年02月13日
    浏览(17)
  • memcmp函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )

    memcmp()函数用于:比较两个内存块 函数声明:int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 参数: ptr1:指向内存块的指针。 ptr2:指向内存块的指针。 数字:要比较的字节数。 返回值: 0: 在两个内存块中不匹配的第一个字节在  ptr1  中的值低于 在 ptr2  中的值(如果计

    2023年04月09日
    浏览(24)
  • docker入门,这一篇就够了。

    Docker容器虚拟化平台。 今天跟大家分享一下我的docker学习历程,也算是我的独特的复习笔记,我会在这一篇中讲清楚docker几乎所有的功能。不过也是我第一次写,而且是一篇两万多字的长文,花了我半个月里所有的休闲娱乐时间,所以写的不好的地方请大家见谅,也请在评论

    2024年02月03日
    浏览(22)
  • 学习SpringSecurity这一篇就够了

    案例源码地址:https://gitee.com/gzl_com/spring-security.git 1.1、概要 Spring Security 是 Spring 家族中的成员。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。 安全方面的两个主要区域是“ 认证 ”和“ 授权 ”。在Web 应用又称之为 用户认证 和 用户授权 两个部

    2024年02月11日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包