结构体问题探究_12_18.c
判断题:
1.结构是变量的集合,可以按照对同类型变量的操作方法单独使用其成员变量。T
2.在定义结构类型时,关键字struct
和它后面的结构名共同组成一个新的数据类型名。T
3.在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。
T,但是为什么?
4.不同类型的结构变量之间也可以直接赋值。
经过试验后,发现不能,但不同类型里的不同成员只要类型相同,可以相互赋值。
5.在对结构变量操作时,.
被称为成员或者分量运算符。T
6.结构数组是结构与数组的结合体,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括多个成员项。T
7.对于结构数组s
,既可以引用数组的元素s[i]
,也可以引用s[i]
中的结构成员。
(1)整个s[i]的引用如定义一个指针变量指向它,解引用就等同于s[i];
(2)用指针变量指向成员,或用结构体名.成员都可以对结构成员进行访问
单选题
经过编译器编译后,可以运行,是很正确的说明定义
struct后是结构类型名,example是新创建的一个该形变量
结构体内字符数组无需“&”符号,因为其本身就是地址,所以这题选A
第一次见给*p赋值的情况
首先梦回数组:
int arr[2] = {0,1}; int* p = arr;
那么*p = 0, *(p+1) = 1;它等同于,arr[0]和arr[1];
那如果,int* p; *p = arr;
(1)首先我依然按照上面相同的输出
结果它报错,大致意思为将一个地址(或指针变量)强行赋值给int型变量(*p),得进行强转
所以类比无效;
回到题干,发现是题目看错,这本来就无法赋值
它是定义了一个结构体:struct student *p,然后又把结构体数组的首地址stu赋给了这个指针变量
所以D不合法的原因是将成员变量的地址赋给了结构体变量指针?尝试编译
也就是我定义的如果是结构体数组,不使用指针是无法直接使用结构体名访问成员的
类比到数组,我可以用指针移位来访问整个数组的个数,而赋值指针只需要数组首地址,而如果我需要用数组名访问数组的话,需要加上坐标。
此题是对运算顺序的考察:
在表达式中,优先级较高的先于优先级较低的进行运算。
而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。
结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。
目前需要查表。
此题中:
箭头和括号的优先级相同且最高,他们是左结合,从左到右
++和 * 相同且其次, 但它们是右结合,从右到左,以此为基础,开始读程序
(1)结构体数组变量名赋给指针变量p
(2)第一个printf语句,先执行箭头访问结构体数组第一个结构体的成员 x ,然后对该成员进行++
得到51,有点类似于复合函数的求导。
此处复习一下++运算符作为前后缀,单独成句时没有区别,都是自己给自己+1
但++p = 1指的是先将p赋值1后再++,得到p ==2;.
而p++= 1指的是先将p++后再赋值1;此时p==1;
(3)所以执行第一个printf语句后,p的值并未发生变化
(4)第二个printf语句括号和箭头同时出现,从左到右,p+1指向结构体数组内第二个结构体变量 时,再指向它的成员 x ,得到60
(5)p指向了第二个结构体变量
(6)第三个printf语句,括号内先运算,箭头优先,访问到第二个结构体变量的指针变量y并进行解引用,得到定义数组中的第二个元素20,再进行++,得到21;
答案选C
有了上一题的基础,首先运行括号内对p进行解引用然后执行箭头访问成员最后进行++
然后就选了C选项
但答案选D,原因是:箭头左边应该是指针变量p,解引用了后是结构体名应该用 . 访问
所以应该是:
(*p).str++,或者说是p->str++
填空题
同样考察运算符
(1)第一个printf 访问成员b解引用后进行++,p的值未发生变化
(2)p指向第二个结构体变量
(3)出现长串逗号,运算从右到左(你想如果从左到右它怎么输出?所以一定是从右到左,事实 上逗号运算符就是右结合。)
(4)右1运算,p先指向第三个结构体变量,然后访问该变量成员a,得到3
(5)右2运算,也是p先指向第四个结构体变量,然后访问成员a,得到7
所以答案如上
这个题目的意思就是,在s[80]字符串里里找字符c,找到了就输出字符串里的c开始后面所有的字符直到\0出现,如第一个循环,找到1后,发现1就是第一个字符串的第一个元素,所以返回s+k时,再输出就是123,又如第四个循环,找不到,那就返回原字符串
所以答案是:
123 23 3 321
总结:当函数返回s(字符串名)+k时,就是返回第(k+1)个字符后的全新字符串(因为末尾有 \0)
结构体问题探究_12_18.c相关推荐
- sdnu中的结构体问题
首先是我遇到的第一道结构体问题 1028 Input 第一行一个整数N,代表手机中有N个联系人.1<=N<=1000 接下来的N行表示每一个联系人的信息,每一行首先是联系人的名称,然后有一 ...
- java jni 结构体_JAVA 的JNI,传参为结构体问题: 我在网上找的资料://返回一个结构 public native DiskInfo getStruct();...
Java代码:classDiskInfo{//名字publicStringname;//序列号publicintserial;}//返回一个结构publicnativeDiskInfogetStruc ...
- C++之指针探究(九):结构体指针
前文:C++之指针探究(八):指针函数和函数指针 相关博文:C++之结构体探究 结构体指针的定义 (1) C语言中的结构体是一种非基本数据类型,可以将多种数据组合为新的数据类型: (2) 定义 ...
- 计算机系统在英语中的运用,在应用系统中探究计算机屏幕英语句法规律.doc
在应用系统中探究计算机屏幕英语句法规律 在应用系统中探究计算机屏幕英语句法规律 [摘要]计算机屏幕英语突出基础性,强调实用性,注重专业性.对计算机屏幕英语的句子结构进行探究,摸索其内在的规律,能够更好 ...
- 中央处理器——CPU的功能和基本结构
文章目录 CPU的功能 运算器和控制器的功能 运算器的基本结构 问题探究 解决方法1. 使用多路选择器 解决方法2. 使用三态门 运算器真正的基本结构 优缺点 控制器的基本结构 CPU整体的基本结构 ...
- 首发 | 13篇京东CVPR 2019论文!你值得一读~ 技术头条
点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑ 编者按:计算机视觉和模式识别大会 CVPR(Conference on Computer Vision ...
- 全方位复盘GNN,12位大神寄望2021年大爆发
作者:Michael Bronstein 编译:李梦佳,贾伟 近段时间,图神经网络(GNN)作为机器学习最热门的领域之一,唱盛有之,唱衰也不少. 就在前两天,一位数据科学家发表了一篇题为"为 ...
- moead算法流程步骤_数据聚类(一)常见聚类算法的基本原理[图解]
文章整理了五种常见聚类算法的基本原理,通过简易图解的形式对算法原理进行形象化的描述,同时给出了算法的实现流程和数学表达.全文约4192字. 相关名词的英文翻译 监督学习Supervised Learn ...
- 直线的端点画垂线的lisp_【以课说法】线段、射线、直线
课例概况 课例点晴 你的课堂是碎片化的知识教学,还是结构化的问题探究?如何把碎片化的知识教学变成结构化的问题探究?实施路径就是问题串,用问题串统整知识点:围绕问题串,从问题引发.问题探究,直到问题解决 ...
最新文章
- electron 剪贴板 截图_用electron开发了一个屏幕截图工具
- django批量form表单处理
- ubuntu添加dvd光盘源
- 安卓布局工具---Hierarchy Viewer
- Android Intent Action 大全
- ubuntu 16.04 R语言安装 rJava package失败解决方案
- 《TensorFlow 2.0深度学习算法实战教材》学习笔记(四、TensorFlow 进阶)
- python 多线程应用
- CentOS上安装man手册
- Web Clip 图片变淡变浅变灰解决方案
- android json解析歌词,网易云歌词获取
- 课程作业记录10:63位PN码序列扩频通信Matlab仿真
- zsh下brew安装
- God.org单域环境攻略(一)
- Mac jdk版本更新
- 数字IC前端面试常见问题整理
- TestOpenWriter
- CC3200——中断优先级
- 二手物品网上交易系统设计与开发 毕业设计毕设参考
- eac 反调试_自己动手制作一个过保护调试器