作业一
分析程序
typedef int (*FUNC1)(int);
typedef int (*FUNC2)(int *, int *, int *);
int inc(int a)
{
return (++a);
}
int multi(int *a, int *b, int *c)
{
return (*c=*a**b);
}
void show(FUNC2 fun, int arg1, int *arg2)
{
FUNC1 p = inc;
int temp = p(arg1);
fun(&temp, &arg1, arg2);
printf("%d\n", *arg2);
}int a = 0; show(multi, 10, &a);
主程序:
分析如下:
1.前两行定义两个指向函数指针,并用typedef改名为func1和func2,参数分别为一个int类型,和三个int指针类型
2.下面定义了两个函数 一个是让参数自增1,另一个是让指针c指向的值等于aheb的值得乘积
3.show函数是传递了一个函数指针和两个int类型指针,函数中中定义了一个int类型的变量通过func1调用inc函数来获取值 此题中temp的值为11
4.通过func2调用函数,使得arg2的值被赋值为temp和arg1的乘积
5.执行过程为 temp 先被赋值为 11 arg1 为10 —----->arg2 = 10*11 = 110
结果为110
作业二
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/**
3、编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefg”
//pStr是指向以''结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps )
{
//请填充...
}
*/
void LoopMove(char*,int);
int main()
{
int n;
scanf("%d",&n);
LoopMove("abcdefghi",n);
return 0;
}
void LoopMove(char *pstr,int steps) {
int len = strlen(pstr);
int i;
for(i = len - steps;i <=len - 1;i++) {
printf("%c",pstr[i]);
}
for(i = 0;i < len - steps;i ++) {
printf("%c",pstr[i]);
}
}
作业三
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
2、阅读一下程序,找出错误并更改。PS:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”*/
int main()
{
char *src = "hello,world";
char *dest = NULL;
int len = strlen(src);
dest = (char*)malloc(len);
char *s = &src[len - 1];
while(len--!=0) {
dest = s--;
printf("%c",*dest);
}
return 0;
}