C/C++

1-“声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*”

首先,我们需要声明一个含有10个元素的数组,但我们知道这些元素都是函数指针,所以我们需要先知道如何声明一个函数指针。假设我们有这样的一个函数:

int func(int *ptr);

对应的函数指针类型声明如下:

int (*funcPtr)(int*);

在这个声明中,funcPtr是一个函数指针,该函数的返回类型为int,并且接受一个int*类型的参数。

接下来,我们要创建一个这样的函数指针的数组。数组的声明方式如下:

int (*funcPtrArray[10])(int*);

在这个声明中,funcPtrArray是一个含有10个元素的数组,每个元素都是一个函数指针。

最后,我们需要创建一个指向这个数组的指针。声明方式如下:

int (*(*ptrToArray)[10])(int*);

在这个声明中,ptrToArray是一个指针,它指向一个包含10个元素的数组,这个数组的每个元素都是一个函数指针。

在C语言中,要声明一个数组,我们通常会指定数组的类型,然后在变量名后面加上方括号 [] 和一个数值来表示数组的长度。比如我们可以声明一个长度为10的整数数组如下:

int arr[10];

在这里,arr 是一个长度为10的整数数组。

如果我们要声明一个函数指针数组,我们同样会在函数指针的名称后面加上方括号 [] 和一个数值来表示数组的长度。

例如,如果我们有一个函数指针类型:

int (*funcPtr)(int*);

我们可以通过在 funcPtr 后面加上方括号 [] 和一个数值来声明一个函数指针数组。如下所示:

int (*funcPtrArray[10])(int*);

在这里,funcPtrArray 是一个长度为10的函数指针数组。每个数组元素都是一个指向函数的指针,这个函数的返回.

2.一台刚刚接入互联网的WEB服务器第一次被访问到时,不同协议的发生顺序是ARP -> DNS -> HTTP。

ARP(地址解析协议) 首先服务器需要通过ARP请求来获取自己与网关的IP与MAC地址对应关系。因为服务器刚连接到互联网,还没有这些对应关系。 DNS(域名解析) 访问者向WEB服务器发起请求时,使用的是域名而非IP地址。所以服务器需要通过DNS解析域名,获取到访问者的IP地址。 HTTP(超文本传输协议) 一旦服务器获取到访问者的IP地址,双方就可以建立HTTP请求-响应通信。服务器返回HTTP响应,包含网页内容。

int main(void)
{
    const int a = 10;
    int * p = (int *)(&a);
    *p = 20;
    cout<<"a = "<<a<<", *p = "<<*p<<endl;
    // a = 10, *p = 20
    return 0;
}

代码试图改变一个被 const 修饰的变量的值,这在C++中是不被允许的。尽管使用了指针和强制类型转换尝试绕过编译器的类型检查,但是当试图修改 a 的值时,行为是未定义的,因为 a 是常量。

在很多现代的编译器环境下,这段代码可能会使得 a 的值在程序中看起来没有被修改,同时 *p 的值看起来是被修改了。因为编译器可能会在编译时期就直接把 a 的值优化成常量,不会生成实际存储 a 值的内存位置,所以尽管通过指针 p 修改了内存的值,但是在用 a 的时候编译器仍然直接使用了 10 这个常量。 在这种情况下,的代码可能会输出:

a = 10, *p = 20

4.用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有__个0。 答案:N/3+N/9+N/27=14

首先我们需要理解3进制下的“0”是什么意思。在任何进制中,末尾的“0”都表示该数可以被这个进制的基数整除。所以在3进制下,末尾有多少个“0”,就表示这个数可以被多少个3整除。

然后,当我们计算阶乘时,比如30的阶乘,也就是1乘以2乘以3乘以4……一直乘到30。在这个乘法序列中,每一个3的倍数都会贡献至少一个3。所以我们要计算30的阶乘中有多少个3的因子。

首先,30/3 = 10,这表示有10个数是3的倍数(它们是3, 6, 9, 12, 15, 18, 21, 24, 27, 30)。

[1,1,2,1,1,2,1,1,3,1]

然后,30/9 = 3,这表示有3个数是9的倍数,也就是说,它们在前一步的计算中已经被计算过一次,但是因为它们是9的倍数,所以它们还会额外贡献一个3(这3个数是9, 18, 27)。

最后,30/27 = 1,这表示有1个数是27的倍数,也就是27自己,它在前两步的计算中已经被计算过两次,但是因为它是27的倍数,所以它还会再额外贡献一个3。

所以,把这三步加起来,我们得到10 + 3 + 1 = 14。所以30的阶乘在3进制下表示的话,末尾会有14个0。

Tags: C++
Share: X (Twitter) Facebook LinkedIn