遇见文字✨遇见爱生活每天正能量

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

2019-07-04  本文已影响10人  307656af5a04

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.

上一篇 下一篇

猜你喜欢

热点阅读