C/C++知识点分享(8)

作者: 307656af5a04 | 来源:发表于2019-07-04 05:06 被阅读10次

    24.以下函数能求出数组的长度吗?

    void fun(char str[])
    { 
        int len = sizeof(str)/sizeof(str[0]);
    }
    

    解析:不能,数组作为参数传递给函数时,数组名被退化为指针,

    因此函数中的sizeof(str)实际是在求一个指针的sizeof,答案为4,

    因此不能计算出数组的长度。

    25. 输出的结果是多少,并分析过程?

    unsigned short A = 10;
    
     printf(“%u\n”, ~A);
    
     char ch = 128;
    
     printf(“%d\n”, ch);
    

    答:~A=4294967285,首先将A转化为int类型,即对应的二进制数值为:

    00000000 00000000 00000000 00001010,

    ~A=11111111 11111111 11111111 11110101,

    其实这种情况最高位是1,认为是负数,但是在输出中指定以无符号数输出,

    于是结果为4294967285=4294967295(四字节表示的最大数)-10.

    ch = 128对应的二进制为:10000000,在输出中以整数形式输出,由于最高位是1,

    于是就是负数,10000000是该负数的补码,根据求补码的反步骤计算,先-1,

    得到01111111,在取反得10000000=128,由于本身是负数,即为-128.

    26. New delete 与malloc free 的联系与区别?

    解析:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.

    相关文章

      网友评论

        本文标题:C/C++知识点分享(8)

        本文链接:https://www.haomeiwen.com/subject/sdjhhctx.html