TOP

12个有趣的c语言面试题(二)
2019-08-15 00:03:39 】 浏览:153
Tags:有趣 语言 试题

 main(void)
  • {
  • char *ptr = "Linux";
  • printf("\n [%c] \n",*ptr++);
  • printf("\n [%c] \n",*ptr);
  • return 0;
  • }
  • 答:输出结果应该是这样:

    1. [L]
    2. [i]

    因为“++”和“*”的优先权一样,所以“*ptr++”相当于“*(ptr++)”。即应该先执行ptr++,然后才是*ptr,所以操作结果是“L”。第二个结果是“i”。

    9.问:修改代码片段(或者只读代码)

    问:下面的代码段有错,你能指出来吗?

    1. #include
    2. int main(void)
    3. {
    4. char *ptr = "Linux";
    5. *ptr = 'T';
    6. printf("\n [%s] \n", ptr);
    7. return 0;
    8. }

    答:这是因为,通过*ptr = ‘T’,会改变内存中代码段(只读代码)“Linux”的第一个字母。这个操作是无效的,因此会造成seg-fault或者崩溃。

    10.会改变自己名字的进程

    问:你能写出一个在运行时改变自己进程名的程序吗?

    答:参见下面这段代码:

    1. #include
    2. int main(int argc, char *argv[])
    3. {
    4. int i = 0;
    5. char buff[100];
    6. memset(buff,0,sizeof(buff));
    7. strncpy(buff, argv[0], sizeof(buff));
    8. memset(argv[0],0,strlen(buff));
    9. strncpy(argv[0], "NewName", 7);
    10. // Simulate a wait. Check the process
    11. // name at this point.
    12. for(;i<0xffffffff;i++);
    13. return 0;
    14. }

    11.返回本地变量的地址

    问:下面代码有问题吗?如果有,该怎么修改?

    1. #include
    2. int* inc(int val)
    3. {
    4. int a = val;
    5. a++;
    6. return &a;
    7. }
    8. int main(void)
    9. {
    10. int a = 10;
    11. int *val = inc(a);
    12. printf("\n Incremented value is equal to [%d] \n", *val);
    13. return 0;
    14. }

    答:尽管上面的程序有时候能够正常运行,但是在“inc()”中存在严重的漏洞。这个函数返回本地变量的地址。因为本地变量的生命周期就是“inc()”的生命周期,所以在inc结束后,使用本地变量会发生不好的结果。这可以通过将main()中变量“a”的地址来避免,这样以后还可以修改这个地址存储的值。

    12.处理printf()的参数

    问:下面代码会输出什么?

    1. #include
    2. int main(void)
    3. {
    4. int a = 10, b = 20, c = 30;
    5. printf("\n %d..%d..%d \n", a+b+c, (b = b*2), (c = c*2));
    6. return 0;
    7. }

    答:输出结果是:

    1. 110..40..60

    这是因为C语言里函数的参数默认是从右往左处理的,输出时是从左往右。

    文章转载自:http://www.pythonheidong.com/blog/article/2148/


    12个有趣的c语言面试题(二) https://www.cppentry.com/bencandy.php?fid=45&id=228568

    首页 上一页 1 2 下一页 尾页 2/2/2
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇c语言面试题__指针篇 下一篇数据结构与算法基础之队列基本概..