1、读程序,写出你的分析步骤,得出结果
#include <stdio.h>
typedef int (*FUNC1)(int); //宏定义一个函数指针func1
typedef int (*FUNC2)(int *, int *, int *);//宏定义一个函数指针func2
int inc(int a)//函数 inc
{
return (++a);
}
int multi(int *a, int *b, int *c)//函数multi
{
return (*c=*a**b);
}
void show(FUNC2 fun, int arg1, int *arg2)//函数 show
{
FUNC1 p = inc; //定义一个函数指针p指向函数inc
int temp = p(arg1); //定义变量接收inc函数的返回值
fun(&temp, &arg1, arg2); //调用fun指向的函数
printf("%d\n", *arg2); //打印指针变量指向的值
}
void main(){
int a = 0;
show(multi, 10, &a);
}
结果为110
分析步骤:
主函数
1.定义变量a并初始化为0;
2.调用函数show();
a.调用函数inc(),并将返回值11赋给temp;
b.调用函数multi(),*arg2=11*10;
c.打印出*arg2的值,110
2、阅读一下程序,找出错误并更改。
PS:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”
<所有头文件都已包含>
main()
{
char*src="hello,world";
char* dest=NULL;
int len=sizeof(src);
dest=(char*)malloc(len);
char* s=src[len];
while(len--!=0)
dest++=s--;
printf("%s",dest);
return 0;
}
#include <stdio.h>
#include <malloc.h>
#include<string.h>
main(){
char*src="hello,world";
char*dest=NULL;
int len=strlen(src); //1.将sizeof改成strlen ,并导入String的包,不然报错 sizeof是记录分配的内存大小,strlen是记录字符串的长度
dest=(char*)malloc(len+1);//2.len改为len+1,要为/0分配空间
char* s=&src[len-1]; //3.将len改成len-1,将指针指向字符串的最后一位
char*d=dest; //4.添加指针指向dest所创建的空内存
while (len--!=0)
*d++=*s--; //5.添加* 将指针s指向的值一一赋给指针d所对应的空内存,这里是不是指针赋值而变量赋值
*d='\0'; //6.添加*d='\0'; 添加字符串结束标志避免输出字符串时乱码
printf("%s\n",dest);
//free(dest); //7.释放内存 可有可无吧,主函数结束肯定释放啊
return 0;
}
3、编写一个函数,作用是把一个char组成的字符串循环右移n个。
比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefg”
//pStr是指向以''结尾的字符串的指针
//steps是要求移动的n
void LoopMove ( char * pStr, int steps )
{
//请填充...
}
#include <stdio.h>
#include <string.h>
void LoopMove(char *pStr, int steps){
//填充:
//--------------------------------------------------
int n = strlen(pStr) - steps;
char tmp[128];
memcpy(tmp, pStr+n, steps); //拷贝字符串
memcpy(pStr+steps, pStr, n);
memcpy(pStr, tmp, steps); //合并得到结果
//---------------------------------------------
}
int main(){
char str[] = "abcdefghi";
LoopMove(str, 2);
printf("%s\n", str);
return 0;
}