2017.11.4 (c)

来源:互联网 发布:java单线程程序 编辑:程序博客网 时间:2024/05/05 17:13

1、读程序,写出你的分析步骤,得出结果

#include <stdio.h>typedef int (*FUNC1)(int);          //宏定义一个函数指针func1typedef int (*FUNC2)(int *, int *, int *);//宏定义一个函数指针func2int 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是要求移动的nvoid 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;}
原创粉丝点击