1.int (*s[10])(int)表示s是一个数组,含有10个元素,每个元素都是一个函数指针,参数为int,返回值为int。
2.(1)C
(2)A
(3)C
(4)E,D
(5)B
3. 7,10
4,(1)quelen=m
(2)quelen=0
(3)队头位置=(rear−quelen+1+m)%m
给定的值是 m=40
,rear=13
,quelen=19
位置为25
(4)
队头位置=((rear−quelen)+m)%m
5.PDPPDPDD
6.10.001<X<29.999
7.页面大小=2^页内偏移位数=2^12=4096字节
页表数量=2^页目录号位数=2^10=1024页
8. (sizeof(array) / sizeof((array)[0]))
9.在大端字节顺序中,一个多字节值的高位字节(最高位)存放在最低的内存地址处,而低位字节(最低位)存放在最高的内存地址处。这种排列方式类似于书的阅读习惯,从左到右,从高到低。
在小端字节顺序中,一个多字节值的低位字节存放在最低的内存地址处,而高位字节存放在最高的内存地址处。这种排列方式与大端相反,即从最低位开始存储。
10.左:(1)在 GetMemory
函数中,分配了内存但没有返回它。没有检查 malloc
是否成功分配了内存
(2)这会导致运行时错误,因为虽然内存被分配了,但是没有将其返回给调用者,导致 Test
函数中的 str
指针仍然为 NULL
。
(3)void Test(void) { char *str = NULL; str = GetMemory(str); // GetMemory 应返回分配的内存
if (str == NULL) { // 处理内存分配失败的情况
return; }
strcpy(str, "hello world");
printf("%s\n", str); // 正确打印字符串
free(str); // 释放分配的内存 }
右:(1)在 GetMemory
函数中,返回了一个局部数组的地址 char p[] = "hello world"; return p;
(2)由于 p
是一个局部数组,其声明周期仅限于 GetMemory
函数的执行过程中。当函数返回后,p
所占用的栈空间将被释放,指向了一块已经不再分配给该指针的内存区域。
(3)char *GetMemory(void) { char *p = malloc(12);
if (p == NULL) {
return NULL; }
strcpy(p, "hello world");
return p; }
void Test(void) { char *str = GetMemory();
if (str != NULL) { printf("%s\n", str);
free(str); // 释放内存 } }