#B6. 指针题解
指针题解
A1429 指针练习:输出Hello
题意
下面程序片段的输出结果是 Hello ,请填空
题解
指针指向字符串,依次输出每个字符。
for(p = s; *p; p++)
A1430 指针练习:输出Zhixin
题意
下面程序输出结果是:
Zhixin
Zhi
请填空
题解
p1指针指向字符串开头,p2指针指向字符串结束输出的位置,依次输出每个字符。
for(; p1 < p2; p1++)
A1431 指针练习:ForEach
题意
程序填空,使得输出结果为:
1,4,9,16,25,
h,e,l,l,o,!,
题解
函数指针,返回值为void,函数参数为void*。
ForEach(void * a, int width, int num, void (*f)(void *))
A1432 指针练习:Memcpy之一
题意
程序填空,使得程序按要求输出
题解
src指针指向原字符串,dest指针指向目标字符串,依次赋值。
for(int i = 0; i < n; i++)
dest[i] = src[i];
A1433 指针练习:double
题意
程序填空,使其输出结果是:
1,2,3,4,
10,12,14,16,
18,20,11,12,
题解
从a[1]开始的6个数字乘2。
Double(a[1], 6);
A1434 指针练习:Memcpy之二
题意
程序填空,使得程序按要求输出
题解
方法1:另开一个数组用来临时存储。
方法2:分情况讨论。
char * csrc = (char *)src;
char * cdest = (char *)dest;
if(src == dest)
return;
if(cdest > csrc) {
//从后往前拷贝
for(int i = size - 1; i >= 0; i--)
cdest[i] = csrc[i];
} else {
//从前往后拷贝
for(int i = 0; i < size; i++)
cdest[i] = csrc[i];
}
A1435 指针练习:MyMax
题意
编写一个 MyMax函数,可以用来求任何数组中的最大值,使得程序按要求输出。
题解
void * MyMax(void * a, int width, int num, int (*compare)(void * p1, void * p2)) {
void * result = a;
for(int i = 1; i < num; ++i) {
if(compare(result, ((char *) a ) + i * width) < 0)
result = ((char *)a) + i * width;
}
return result;
}
A1436 指针练习:指向指针的指针
题意
程序填空使得输出指定结果。
题解
定义p指针,指向a指针。
for(int ** p = a; p < a + 3; ++p)
A1437 指针练习:SwapMemory
题意
填写内存交换函数 SwapMemory,使得程序输出指定结果。
题解
定义指针p1、p2,指向m1、m2,交换指针指向的内容。
char * p1 = (char *)m1;
char * p2 = (char *)m2;
for(int i = 0; i < size; ++i) {
char tmp = p1[i];
p1[i] = p2[i];
p2[i] = tmp;
}