zoukankan      html  css  js  c++  java
  • 有趣的IT面试题

    一段看起来很简单C代码,预期结果是输出array数组。

    #include<stdio.h>
    #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
    int array[] = {23,34,12,17,204,99,16};
    int main()
    {
    	int d;
    	for(d = -1;d <= (TOTAL_ELEMENTS - 2); d++)
    		printf("%d
    ", array[d+1]);
    	return 0;
    }

    代码编译运行后,结果不是想要的那个数组,而是空值,这是很多人就会想到宏定义了,原因是宏定义是没办法获得数组的长度。

    可我们把for循环改一下就有不同的结果了

    	for(d = -1; d <= ((int)TOTAL_ELEMENTS-2); d++) 

    把TOTAL_ELEMENTS强制转换成int类型的,结果就变成了:

    IT面试题

    。。。。。。。。。。这是我们想要的结果,那就是说宏定义没问题。

    我们在原来的main()函数中加一句

    	int array_length = TOTAL_ELEMENTS;

    这样和类型强转的效果应该是一样的,跟踪监视后得到下面的结果:

    IT面试题

    提示是没有找到符号"TOTAL_ELEMENTS",但是array_length却有值。。。。。。。很郁闷

    接着,我们在for循环里处理数组长度

    	for(d = -1; d <= ((sizeof(array) / sizeof(array[0])) - 2); d++)

    现在,输出结果应该就是我们想要的那个数组了。可结果呢,啥都没输出。。。。。。。更郁闷

    那就继续跟踪监视

    IT面试题

    好像都没问题,不过注意它们的类型,是无符号整形(unsigned int),而循环条件d是整形(int),并且d的初始值为-1,不再无符号整形(unsigned int)定义范围之内,现在看来好像是类型的问题了,那我们将循环条件d的初始值改为0试试:

    #include<stdio.h>
    #define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
    int array[] = {23,34,12,17,204,99,16};
    int main()
    {
    	int d;
    	for(d = 0; d <= (TOTAL_ELEMENTS - 1); d++)
    		printf("%d
    ", array[d]);
    	return 0;
    }

    输出的结果是

    IT面试题

    结果正是我们想要的。没有进行强制类型转换,也没有进行二次赋值,只是将循环条件d的初始值定义在了无符号整形(unsigned int)的范围之内。

    我们再做个小测试

    int main()
    {
        int array[] = {23,34,12,17,204,99,16};
        int d = -1;
        if(d <= (sizeof(array) / sizeof(array[0])) -2)
            printf("先有鸡
    ");
        else
            printf("先有蛋
    ");
        return 0;
    }

    从代码看来,应该是输出“先有鸡”。不过这次结果又是事与愿违,输出的是“先有蛋”。

    所以建议在写代码的时候尽量避免使用无符号类型,同时也尽量避免有符号类型和相应的无符号类型进行比较等。

    ================================================================

    本人才疏学浅和其他原因,没有进行更深入的研究,只是偶尔看到的IT面试题,感兴趣简单的测了一下。

    不过跟踪监视后,CX0017:错误:没有找到符号"TOTAL_ELEMENTS",还是没有找到原因,有知道的大神不妨指点一二。。。。。。

  • 相关阅读:
    vue router路由懒加载
    vue router动态路由
    vue router路由跳转
    vue router-link属性
    vue router mode
    vue router
    vuecli脚手架
    R读取大文件速度太慢?来试试能提速两千倍的fread
    基于RAINBOW的单倍型全基因组关联分析(haplotype-based GWAS)教程
    今日Vlog:Jmeter中那些循环
  • 原文地址:https://www.cnblogs.com/lonzhe/p/3914975.html
Copyright © 2011-2022 走看看