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.