2017.11.4 (c)

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值