暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

昨天的题写个解答

今天有空了,分享一下我的思路

    struct tmp{
    int a;
    char c;
    short int l;
    char b[6];
    }
    sizeof(tmp)=?
    复制

    这个题主要考察字节对齐(也叫内存对齐)

    首先,我们先分析结构体前三个变量的内存,int型的a占4个字节,后面的c和l一起占4个字节,所以a,c,l一共就占了8个字节。然后就是char数组了,数组长度为6,6和前面的对齐之后应该是8,所以最终答案为16.

      union{
      int a;
      char b[2];
      }s;


      s.b[0]=2;
      s.b[1]=5;
      s.a=?;
      复制

      这个题考察对联合体的理解

      联合体是所有成员共用一段内存,我们先看打印结果

      打印结果是502,这个是16进制的结果,便于分析,首先s.b[0]和s.b[1]分别对应s.a的低两位,低两位的表示为0x0502,高两位不变,所以s.a内存存取应该是0x000502.

        char* getstr(){
            char str[20];
            for(int i=0;i<20;i++){
             scanf("%c",&a[i]);
            }
            return str;
        }
        printf("%s\n",getstr());
        复制

        这里首先得区分一下指针函数和函数指针的区别,这个很明显是一个指针函数,返回值是一个指针,但是这个函数在编译的时候会有警告,因为返回的str是一个地址,不是指针。但这个题最终printf是能正常输出的。


        顺便说一下指针函数和函数指针的差别,指针函数是一个返回值为指针的函数,本质上是函数,而函数指针本质上是一个指针,只是这个指针储存的是函数的地址。

        文章转载自春哥的嵌入式小世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论