#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;
}