• c语言字符串&结构体考试总结


    博客主页: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所指向的地址的值,只不过是以十进制进行输出的。

    验证:

    1. char *s="abcde";
    2. s += 2;
    3. printf("%d\n",s);//十进制地址
    4. 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,然后取内容,正确

    验证:

    1. char *s;
    2. char ch[20]="progrming";
    3. s=ch;
    4. 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个开始写入。

    验证:

    1. char s[51];
    2. gets(s+2);
    3. puts(s);
    4. 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计算在内。

    验证:

    1. char str[]="welcome";
    2. printf("%d\n",strlen(strcpy(str,"Hello")));
    3. 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.

  • 相关阅读:
    Linux——程序地址空间
    OceanBase 4.3 特性解析:列存技术
    虹科示波器 | 汽车免拆检修 | 2021款广汽丰田威兰达PHEV车发动机故障灯异常点亮
    Qt控制台项目也能使用opencv的imshow来显示摄像头视频
    Linux 搭建NFS
    阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+
    算法与数据结构-贪心算法
    总结:常见的服务发布策略
    Win11使用WSL2安装ubuntu,ubuntu桌面配置,ubuntu子系统删除
    【转】推送消息&推送机制
  • 原文地址:https://blog.csdn.net/weixin_46094737/article/details/126372151