姬世鹏 发表于 2019-12-11 22:09:33

自定义函数不太懂怎么定义函数类型和参数类型以及返回值怎么有问题?

#include <stdio.h>

char mystyle(char *array,int i);
char mystyle(char *array,int i)//将接收的数组位置颠倒后返回
{
        i--;
        char *m = array;
        for(i;i > 0;i--)
        {
                m = *array++;
        }
       
        return array;
}
int main()
{
        char num;
        for(int i = 0;(        num = getchar()) != '\n';i++)
        {
             if(i == 9) num = '\0';
        }
        printf("%s",mystyle(&num,i));

        return 0;
}

superbe 发表于 2019-12-11 22:09:34

单从语法上说,
第一行红色是因为char *m = array[ i ]; 这行,等号左边是char*类型,等号右边是char类型,二者不匹配。
第二行红色是因为return array;这行,返回的array是一个char*,而函数类型定义的却是char,二者不匹配。
第三行红色是因为printf("%s",mystyle(&num,i));这行中的 i,i 是在for(int i = 0;......)这里声明的,它的作用域是for块,而printf中的 i 是在for块后面的,已超出了 i 的作用域。

Croper 发表于 2019-12-11 22:25:28

https://www.runoob.com/cprogramming/c-functions.html
我觉得你应该再好好把这个看一遍

superbe 发表于 2019-12-12 00:21:12

本帖最后由 superbe 于 2019-12-12 00:22 编辑

#include <stdio.h>
// char mystyle(char *array, int i); //mystyle函数定义在main前面,不必用函数原型

char* mystyle(char *array, int i)    //返回类型为char*
{
    int j;
    char c, *m = array + i - 1;      //m指向array末尾元素
    for (j = 0; j < i / 2; j++, m--){ //交换对称的元素
      c = array;
      array = *m;
      *m = c;
    }
    return array;
}
int main()
{
    char num;
    int i;
    printf("Enter a string:\n");
    for (i = 0; i < 9 && (num = getchar()) != '\n'; i++);
    num = '\0';
    printf("%s\n", mystyle(num, i));//num数组名代表首元素地址,不用&

    return 0;
}

54黑科技 发表于 2019-12-12 10:54:01

遇到这种问题,可以去翻翻资料书,或者网上找找教程,看看人家怎么弄的。

姬世鹏 发表于 2019-12-12 22:50:45

superbe 发表于 2019-12-12 00:21


但是我不清楚我的错在了哪里,错误提示:D:\c渔业\未命名1.cpp        name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]
D:\c渔业\未命名1.cpp        (if you use '-fpermissive' G++ will accept your code)
页: [1]
查看完整版本: 自定义函数不太懂怎么定义函数类型和参数类型以及返回值怎么有问题?