前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言——小学一年级题目解析(四)

C语言——小学一年级题目解析(四)

作者头像
Ed_Frey
发布2019-11-12 22:52:48
5050
发布2019-11-12 22:52:48
举报
文章被收录于专栏:奔跑的键盘侠奔跑的键盘侠

作者|我是奔跑的键盘侠

来源|奔跑的键盘侠(ID:runningkeyboardhero)

转载请联系授权(微信ID:ctwott)

搬砖继续……

年级只是代表题型,难度不做区分。规则:

一年级:选择题;

二年级:填空题;

三年级:阅读题;

四年级: 编程题。

第14题

概念理解题,stu是结构体的类型名,而括号后面的stutype是变量名。

选项C错误。

第15题

概念理解题,stu1是变量名。引用成员有三种形式:也就是选项中的B、C、D

选项A错误。

想起Python中类和对象的概念,跟这个还是不太一样的,python里面私有成员要通过对象来引用,而公有成员?忘了啥称谓了

可以通过类名引用

第16题

概念题。一个变量x的地址就是该变量的指针,记作&x,课本上的定义。

选A

第17题

*p是指针,取m的地址&m,赋值给p,那指针就指向了m的地址。

选D

第18题

这题考查字符串的初始化,稍微有点难度。

char a[10]="china";

char a[]="china";

上面2个表达形式比较容易理解。对应A选项没问题;

而char *a; a="china";等价于char *a="china",对应C选项也没问题;

选项D,char a[10];然后把字符串赋值给a,a是啥?a相当于&a[0]了,显然不能这么玩。硬要玩就报错:

error: assignment to expression with array type

关于数组,如果初始化时未赋值,后续要赋值需要遍历或者单个单个的赋值,而不能直接a整体赋值。

至于选项B,编译没问题,但是没整明白这个a有啥用,因为p的赋值,并不会使a发生改变。还是coding一下选项B,看看都发生了些什么:

代码语言:javascript
复制
#include <stdio.h>
int main(){  char a[10];  char* p=a;  printf("%p\n",p);  printf("a=%s\n",a);
  p="china";  printf("%p\n",p);  printf("p=%s\n",p);  printf("a=%s\n",a);  return 0;}

==========编译成功后开始运行==========

"C:\Users\2019_943_131.exe"

Process started (PID=192) >>>

0061FF12

a=@

0040506E

p=china

a=@

<<< Process finished (PID=192). (Exit code 0)

================ READY ================

指针p先指向a,然后p被赋值为china,地址发生了变化,即:指向了字符串“china”的首地址,而不是直接a的内容改成了china。a的内容一直没有,输出一个@符号可能是系统随机分配的地址上的内容?还是跟编译器有关?感兴趣的小伙伴可以自己试验一下。

另外字符串赋值char *p; p="china"等价于char *p="china"

然后*p是char类型,而p在这里是字符串类型同时也指向字符串首地址,也就是p的地址值可以用%p输出,如果用%s输出就是字符串了。而int *p则不然,如果要输出指向变量的值必须用*p(%d),如果用p(%d)输出的就是地址的十进制形式。

感觉这是学C以来最绕的一个,剪不断理还乱

第19题

这题紧接着上一题,其实上一题还有个点没说,刚好就又来了。

这题跟上题的B选项差不多,但是while里面有个*p,之前没提及。

*p是char类型,如果要输出字符,要用%c格式,每次只能输出一个。这里是单个字符,也就是ASCII码中对应的0-127共计128个字符。

如果直接用%s输出p,就是直接出来字符串了。清晰起见,再来一段codin

代码语言:javascript
复制
#include <stdio.h>
int main(){  char a[]="language",*p;  p=a;  printf("%s\n",p);  while(*p) printf("%2c",*p++);  printf("\n");  return 0;}

==========编译成功后开始运行==========

"C:\Users\2019_943_39.exe"

Process started (PID=20740) >>>

language

l a n g u a g e

<<< Process finished (PID=20740). (Exit code 0)

================ READY ================

希望对新手能有所启发和加深印象吧

再来说这道题目,while循环,*p是从language首字符开始循环,p++渐进,走lang,到后面的u停止循环。输出的是(*p)-32,也就是小写字母转大写,lang变LANG。

选C。

代码语言:javascript
复制
#include <stdio.h>
int main(){  char a[]="language",*p;  p=a;  while(*p!='u'){    printf("%c",(*p)-32);    p++;  }  printf("\n");  return 0;}

==========编译成功后开始运行==========

"C:\Users\2019_943_39.exe"

Process started (PID=5996) >>>

LANG

<<< Process finished (PID=5996). (Exit code 0)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑的键盘侠 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档