您的位置:首页 > 其它

2016.9.12

2016-09-12 20:38 204 查看
1

int main()

{
int a; float b, c;
scanf("%2d%3f%4f", &a, &b, &c);
printf("\n a = %d, b = %d, c = %f\n", a, b, c);
}
问:输出什么?
printf函数执行的时候,会先把这三个数字栈里,然后再执行打印。压入栈的时候按照数据本身的长度来。首先把c和b压入,并且每一个都是8个字节(printf自动转化为double)。然后再压入a是4个字节。然后再执行打印。打印的时候按照用户指定的格式来出栈。首先打印a,a打印正常。然后又打印4个字节长度的b,在栈里面由于b长度是8个字节,并且b目前是64位的表示方式,数据的后面全是0。(float变double),电脑是小端存储方式,0存储在距离a近的地方。打印b的时候,打印的4个字节都是0.然后再打印c,c用正常的方式打印,会一下子
读取8个字节,下好,读出来的8个字节前面4个字节全是0,因此为0。

小端存储:最低地址存放最低字节。如数据12345678H,存储的数字是:78563412H。可以粗略想象为跟平时写的数字相反。而大端存储的存储方式则跟我们平时写的数字顺序一样。

2
回调函数本身可以是全局函数、静态函数和某个特定的类的成员函数。(False)

原因:回调函数就是一个通过函数指针调用的函数。如果把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。类的成员函数需要隐含的this指针,这是回调函数没有办法提供的。

3

#include<iostream>

using namespace std;

class A

{

public:

A()

{

printf("A");

}

};

int main()

{

A* p1 = new A;

A* p2 = (A*) malloc (sizeof(A));

}

问:输出什么

A;该题主要考查new和malloc的区别,new会分配内存,并调用类的构造函数创建对象,而malloc只是分配内存,不调用类的构造函数创建对象,这个程序应该用delete p1;显示释放掉p1所指的堆上的内存,这样才会调用类的析构函数,否则不会调用。

4

#include <stdio.h>

void fun(char* p, int n)
{
char b[6] = "abcde";
int i;
for(i = 0, p = b; i < n; i++)
{
p[i] = b[i];
}
}
void main()
{
char a[6] = "ABCDE";
fun(a, 5);
printf("%s\n", a);
}

问:输出什么?

数组名作为函数参数,执行fun函数时,传进去的a指针被重新指向了b,所以原本a数组的地址内容不变,所以输出结果为ABCDE。

#include <stdio.h>

void fun(char* p, int n)
{
char b[6] = "abcde";
int i;
for(i = 0, p = b; i < n; i++)
{
p[i] = b[i];
}
}
void main()
{
char a[6] = "ABCDE";
fun(a, 5);
printf("%s\n", a);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: