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。