当前位置: 首页 > news >正文

【二级C语言考试】自定义数据类型

C语言二级考试——自定义数据类型

十、结构体(即“结构”)与共同体(即“联合”)

  1. 用 typedef说明一个新类型。
  2. 结构体和共用体类型数据的定义和成员的引用。
  3. 通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。

知识点参考【C语言】自定义数据类型-CSDN博客

文章目录

    • typedef
    • 结构体

typedef

第一套13题

在这里插入图片描述

本题考查点是用户定义类型(typedef)。

指针数组和数组指针:

//指针数组,是存放指针的数组,即指针类型的数组
int a=0,b=1;
int* p1=&a,p2=&b;
int* arr1[]={p1,p2},arr2[]={&a,&b};
//数组指针
int arr[]={1,2,3,4,5};
int* p=arr;//arr被转换成了一个指针,可以直接赋值给指针变量

C语言允许用typedef说明一种新类型名,说明新类型名的语句一般形式为:typedef类型名 标识符;由题目可知T是指针类型,T a[10]是指针数组,int *a[10]是指针数组;int (*a)[10]是数组指针;int *a是指针变量;int a[10]是数组。本题答案为C

结构体

第一套11题

在这里插入图片描述

本题考查结构体的运用。

  • 本题在结构体内定义了指针变量name,字符变量gender,整型变量score,在主函数中定义了两个结构体变量a和b,并为a赋予了新值(初始化);语句b=a是将结构体变量a的内容赋给了结构体变量b。

  • strcpy(arr1,arr2)函数是拷贝arr2到arr1。

  • void *malloc(size_t size)函数:分配所需的内存空间,并返回一个指向它的指针。

  • 对于结构体的赋值,意味着将其中的每一个元素都进行赋值,需要访问结构体变量元素,形式结构体变量name.成员name,一级一级的找到最低一级成员再进行对其操作。但该题中b.gender=‘f’;b.score=350;语句又为b赋予了新值,a.name和b.name是指向同一内存地址的,因此a.name=b.name=Zhao。故本题答案为D

第一套12题

在这里插入图片描述

注意:本题和上一题的区别是,在主函数前定义了void类型的函数f,调用f函数,在f函数体中给p开辟了一个新的空间,在新的空间里的*p=Qian,但对主函数无任何影响。语句中又为b中的gender和score元素赋予了新值,b.gender=‘f’;b.score=350;.故本题答案为B

关于该题程序的思考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stu{char *name,gender;//成员name赋值内容为字符串形式,同时下面的函数malloc申请内存空间,定义为char*类型int score;
}STU;
void f(char* p){p=(char*)malloc(10);//如果该函数不申请新的内存空间,主函数中的b.name调用该函数时,会改变值strcpy(p,"Qian");
}
main(){STU a={NULL,'m',290},b;a.name=(char*)malloc(10);//name指向空,需要申请内存地址strcpy(a.name,"Zhao");//将Zhao拷贝到a.name指向的地址
//	a.gender=(char*)malloc(10);给gender申请内存后,注意printf的形式应为%s
//	strcpy(a.gender,"M");b=a;f(b.name);//b.name='test';注意不能给指针直接赋值,下面同理
//	b.name=(char*)malloc(10);//给b.name申请新的空间,输出指向的是新的空间,即给b.name再一次进行了赋值//strcpy(b.name,"Qian");//指针指向的还是a.name的地址,不会输出该拷贝的值b.gender='f';//如果上面没有申请gender地址,可以直接赋值,score同理//strcpy(a.name,"A");//a.name="A";//b.name="Qian";//b.gender='F';b.score=350;printf("%s,%c,%d",a.name,a.gender,a.score);printf("%s,%c,%d",b.name,b.gender,b.score);
}

第一套17题

在这里插入图片描述

本题考查点是结构体的运用。

本题定义了两个结构体变量a和b,f(a,b)函数是按值传送(传值调用),因此在f函数中将a的内容复制给b,输出Zhao,m,290,但并未对主函数中结构体b中的值造成影响,因i主函数中输出Qian,f,350.故本题答案为A。

  • 函数参数:一默认情况下,C使用传值调用来传递参数。一般来说。这意味着函数内的代码不能改变用于调用函数的实际参数。题中代码表明,虽然在函数内改变了a和b的值,但是实际上a和b的值没有发生变化。

第一套18题

在这里插入图片描述

该题中的f函数是引用传值。上面的实例表明了,与传值调用不同,引用调用在函数内改变了a与b的值,实际上也改变了函数外a与b的值。故答案为A

  • 传值调用,该方法把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

第一套20题

在这里插入图片描述

本题考查的是结构体数组。

  • 结构体数组,是指数组中的每一个元素都是一个结构体类型。
  • 访问数组中的特定元素时,第一个索引值为0

假设i,j为整型;stud[i].name[j]对应的是变量stud[10]的第i+1个元素,name[10]中的第j个元素。故本题答案为D。

第一套24题

在这里插入图片描述

本题的考查点是对结构体变量成员的引用和结构体指针。

  • 若已定义了一个结构体变量和基类型为同一结构体类型的指针变量,并使该指针指向同类型的变量则可以用以下三种形式来引用结构体变量中的成员,结构体变量名也可以是已定义的结构体数组的数组元素。(1)结构体变量名.成员名(2)指针变量名->成员名(3)(*指针变量名).成员名。故本题答案为B。

第一套27题

在这里插入图片描述

解析如上题,本题答案为A。

第一套28题

在这里插入图片描述

本题考查的是结构体指针和数组指针访问

  • 数组指针int* p=arr=&arr[0]代表的都是数组的首地址。
  • 指针访问:在定义数组指针int* p=arr后,a[2]等价于*(p+2)

由题目可知room指针指向的是结构体room[4]的第一个元素{“Zhao",19};{room+2}->name指针指向的是结构体room[4]的第三个元素中的Wang。故本题答案为C。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Gin渲染
  • CSS01-语法规范、基础选择器
  • 使用ESP8266和OLED屏幕实现一个小型电脑性能监控
  • Spring Boot-热部署问题
  • C语言中值传递
  • java通过org.eclipse.milo实现OPCUA客户端进行连接和订阅
  • Python | Leetcode Python题解之第421题数组中两个数的最大异或值
  • 详细分析分布式事务场景、理论基础以及解决方法
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.1-2.2
  • python函数三:拆包和交换变量值、引用、匿名函数
  • 使用 uni-app 开发微信小程序的详细指南
  • Thymeleaf模板引擎
  • 【深度学习】发展过程和实际应用场景——图像分类 ?自然语音处理?语音识别?自动驾驶?医疗影像诊断?附代码
  • Java项目基于docker 部署配置
  • shell指令及笔试题
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 【知识碎片】第三方登录弹窗效果
  • gops —— Go 程序诊断分析工具
  • Java,console输出实时的转向GUI textbox
  • java8 Stream Pipelines 浅析
  • Joomla 2.x, 3.x useful code cheatsheet
  • Linux gpio口使用方法
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • 基于HAProxy的高性能缓存服务器nuster
  • 批量截取pdf文件
  • 深入浏览器事件循环的本质
  • 算法-图和图算法
  • ###STL(标准模板库)
  • #微信小程序(布局、渲染层基础知识)
  • ( 10 )MySQL中的外键
  • (20)docke容器
  • (7)STL算法之交换赋值
  • (arch)linux 转换文件编码格式
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (三分钟)速览传统边缘检测算子
  • (转)甲方乙方——赵民谈找工作
  • .apk文件,IIS不支持下载解决
  • .NET : 在VS2008中计算代码度量值
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET中 MVC 工厂模式浅析
  • //解决validator验证插件多个name相同只验证第一的问题
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @PostConstruct 注解的方法用于资源的初始化
  • @RequestMapping 的作用是什么?
  • @selector(..)警告提示
  • @vue/cli脚手架
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...