当前位置:   article > 正文

【嵌入式笔试题】C语言笔试题(3)

【嵌入式笔试题】C语言笔试题(3)

C语言非常之经典的笔试题。

3.内存管理&编程题(20道)

 

3.1gcc编译的C语言程序占用的内存分为哪几个部分?

3.2小端:一个数据的低位字节数据存储在低地址

大端:一个数据的高位字节数据存储在低地址
例如: int a=0x12345678; //a 首地址为 0x200 ,大端存储格式如下:
如何判读一个系统的大小端存储模式?
1 )方法一: int * 强制类型转换为 char * ,用 “[]” 解引用
  1. void checkCpuMode(void)
  2. {
  3. int c = 0x12345678;
  4. char *p = (char *)&c;
  5. if(p[0] == 0x12)
  6. printf("Big endian.\n");
  7. else if(p[0] == 0x78)
  8. printf("Little endian.\n");
  9. else
  10. printf("Uncertain.\n");
  11. }
2 )方法二: int * 强制类型转换为 char * ,用 “*” 解引用
  1. void checkCpuMode(void)
  2. {
  3. int c = 0x12345678;
  4. char *p = (char *)&c;
  5. if(*p == 0x12)
  6. printf("Big endian.\n");
  7. else if(*p == 0x78)
  8. printf("Little endian.\n");
  9. else
  10. printf("Uncertain.\n");
  11. }
3 )方法三:包含 short char 的共用体
  1. void checkCpuMode(void)
  2. {
  3. union Data
  4. {
  5. short a;
  6. char b[sizeof(short)];
  7. }data;
  8. data.a = 0x1234;
  9. if(data.b[0] == 0x12)
  10. printf("Big endian.\n");
  11. else if(data.b[0] == 0x34)
  12. printf("Little endian.\n");
  13. else
  14. printf("uncertain.\n");
  15. }

3.3全局变量和局部变量的区别?

1 )全局变量储存在静态区,进入 main 函数之前就被创建,生命周期为整个源程
序。
2 )局部变量在栈中分配,在函数被调用时才被创建,在函数退出时销毁,生命周
期为函数内。

3.4以下程序中,主函数能否成功申请到内存空间?

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. void getmemory(char *p)
  5. {
  6. p = (char *)malloc(100);
  7. strcpy(p, "hello world");
  8. }
  9. int main()
  10. {
  11. char *str = NULL;
  12. getmemory(str);
  13. printf("%s\n", str);
  14. free(str);
  15. return 0;
  16. }
答案: 不能。
解读: getmemory(str) 没能改变 str 的值,因为传递给子函数的只是 str 的复制值
NULL main 函数中的 str 一直都是 NULL 。正确的 getmemory() 如下:
传递的是二重指针,即 str 的指针
void getmemory(char **p)
{
        *p = (char *)malloc(100);
        strcpy(*p, "hello world");
}
传递的是指针别名,即 str 的别名, C++
void getmemory(char * &p)
{
        p = (char *)malloc(100);
        strcpy(p, "hello world");
}

3.5 请问运行下面的Test()函数会有什么样的后果?

void GetMemory(char **p, int num)
{
        *p = (char *)malloc(num);
}
void Test(void)
{
        char *str = NULL;
        GetMemory(&str, 100);
        strcpy(str, "hello");
        printf("%s\n", str);
}
答案: 内存泄漏。
解读: 调用 malloc() 申请内存空间,使用完毕之后没有调用 free() 释放内存空间并使指
针指向 NULL

3.6 请问运行下面的Test()函数会有什么样的后果?

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/541572
推荐阅读
相关标签
  

闽ICP备14008679号