C语言关于指针的一道题求大家帮忙解答

2024-12-02 23:51:38
推荐回答(2个)
回答1:

第一个错误:m是一个普通变量,输入的时候,格式不应该是%s,所以主函数里面的scanf("%s",&m);应该改成scanf("%c",&m);

第二个错误:if(m==a) x=reverse;
else if(m==b) x=upper;
a和b没有值,所以应该把这个改成
a='a';b='b';
if(m==a) x=reverse;
else if(m==b) x=upper;
第三个错误:c=(*x)(*y,n);被调函数第一个参数是指针,传过去的应该是地址,所以应该改成

c=(*x)(y,n);

回答2:

#include 
#include 

char* reverse(char *p,int n)
{
    int i;
    char t;
    for(i=0; i <= n/2; i++)
    {
        t=p[i];
        p[i]=p[n-1-i];
        p[n-1-i]=t;
    }
    return p;
}

char* upper(char *p,int n)
{
    int i;
    for(i=0; i < n; i++)
    {
        if(p[i]>='a'&&p[i]<='z')
            p[i]+='A'-'a';
    }
    return p;
}

int main()
{
    char* (*x)(char*,int);
    char str[999],m,n,*c;
    printf("please enter string str:");
    gets(str);
    n=strlen(str);
    printf("please choose a or b:");
    scanf("%c",&m);
    if(m=='a') x=reverse;
    else if(m=='b') x=upper;
    c=x(str,n);
    if(m=='a') printf("reverse:%s\n",c);
    else printf("upper:%s\n",c);
    return 0;
}