博客主页:https://blog.csdn.net/weixin_46094737?type=blog
欢迎评论⭐留言 如有错误敬请指正!
本文由小学生廉原创,首发于 CSDN🙉🙉🙉
未来很长,值得我们全力奔赴更美好的生活!💞💞💞
今吾师以试应之,吾则欣然思其矣。
答题间,吾之思路如滔滔江水,或怦然而出,或差之枯竭。然吾均以之答曰,毕矣。
吾以其卷之易,甚之欣悦,俟察其答案,甚惊矣。
吾之曰较之答案,差之甚远,谬之过半矣。
吾深思其因,或以为答其间思之甚微,或粗心矣。今以之为点,后必深思远虑矣!!!
分析: A:字符型指针只能在初始化时整体进行赋值,或者说只能在初始化时指针指向一串字符首地址。
B:这种写法错误:str[ ]={“china”;}
C:正确
D:不能连等,会报错。char c[4]=d[4]=”abc” ;
分析:首先需要注意这个字符串中的\0,我们会以为\0作为字符串结束标志,会扰乱做题思维,这里的\01作为整体会以一个8进制数1去读取,所以本题各个字符作为循环条件会有:\t a \01 8 b c,一共6个。循环次数为6.
分析:A:字符型数组s需要给\0预留一个空间去存。
B:本题要求字符串赋值,单个字符赋值不对题目要求。
c:正确
d:在定义指针s的时候没有指向,没有地址去存将要赋值的字符串。或者说s是一个野指针
分析:需要注意在打印是,后面的变量是一个s,s是一个指针,故打印出来的是s所指向的地址的值,只不过是以十进制进行输出的。
验证:
char *s="abcde";
s += 2;
printf("%d\n",s);//十进制地址
printf("%#p",s);//十六进制地址
分析:a:两个指针去内容相加赋值给c,没毛病
b:p2是一个指针,c是变量,没有取地址&
c:两个指针指向同一个地址,取得的内容当然一样
d:和a异曲同工,相乘而已
分析:a:字符型数组可以直接赋值
b:正确写法,指针指向数组首地址,然后赋值存入
c:先定义指针,然后指向一串字符首地址。
d:连等写法错误,不能连等,或者说,数组a只能在初始化是进行整体赋值。
分析:a:ps指针偏移2,但是还是指针,,没有取内容*,故错误
b:正确数组引用
c:ps指针,加上[2],表示指针偏移2,然后取内容,正确写法
d:指针偏移2,然后取内容,正确
验证:
char *s;
char ch[20]="progrming";
s=ch;
printf("%c",s[2]);
分析:1、将p2+1所指内容(“fgh”)复制写入str+1(“BCDEFG”),字符串此时为:Afgh
2、 将p1+3所指内容(“d”)复制写入str+1(“h”),字符串此时为:Afgd
注意:strcpy(str01,str02)字符串赋值函数是将str02整体覆盖赋值写入str01中,str01中未覆盖的字符还存在,并未消失。
分析:a:可以这样赋值,只是将字符串从数组元素第3个开始写入。
验证:
char s[51];
gets(s+2);
puts(s);
puts(s+2);
b:注意scanf()遇到空格就结束,故无法存入
c:注意c项是getchar(),一个字符一个字符写入,最后写入\0,这种当然也可以
d:和c项一样,一个字符一个字符写入,完全可以,只是些许麻烦而已
注意条件:q=p,两个指针指向开辟的同一块区域地址,p指向q的首地址,q的内容为“def”,故p所指向的内容也是“def”。
分析:首先第一个\b退格符将a进行退格(干掉),第二个退格符将\退格,排除法直接c
字符函数头文件:ctype.h
字符串头文件:string.h
分析:考试太马虎,不细心,经验主义错误太多
分析:本题还是在考察strcpy()字符串复制函数,“Hello”字符串整体赋值写入“welcome”中,计算的长度也是“Hello”的字符串长度为:5
注意此时的sizeof(str)值为:8,因为字符串复制函数,只是覆盖对应字符长度,不改变原有字符串长度,而且sizeof也将\0计算在内。
验证:
char str[]="welcome";
printf("%d\n",strlen(strcpy(str,"Hello")));
printf("sizeof(str)=%d\n",sizeof(str));
分析:注意题目要求,long int类型为8字节,故本题的对齐字节数为8,char name[20]实际占20个字节,但是本题基本单位对齐数为8,故需要开辟3*8=24字节,long int再开辟8字节,最后int实际占16字节,为8字节开辟需要2个基本单位2*8,故三者相加为6*8=48字节。
分析:首先我们将struct HAR类型的数组h[2]值写清楚,h[2]={{1,2}{3,4}};然后h[0].p=&h[1]表示h[0].p指向h[1]的首地址即3的地址,h[1].p=h表示h[1].p指向数组h的[2]的首地址即1,然后再看题目中的打印,h[0].p)->x取x的值为3,,(h[1].p)->y)取y的值为2。故答案输出32.
本题结构还是比较清晰的,就是需要仔细。认真读题!!!!!
分析:首先分析联合体的字节数为8,然后嵌套到第二个结构体中,记住一点,无论如何嵌套,基本对齐数永远是以最大类型变量为准,与联合体大小无关,故第二个结构体对齐数为8,这里的8并不是因为联合体的字节数为8才开辟的8,而是因为第二个结构体struct st中出现了double类型才开辟的8.故计算也比较简单:8+3*8+8=40.