作者|我是奔跑的键盘侠
来源|奔跑的键盘侠(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,看看都发生了些什么:
#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
#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。
#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)