鱼C论坛

 找回密码
 立即注册
查看: 2452|回复: 5

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

[复制链接]
发表于 2019-12-11 22:09:33 | 显示全部楼层 |阅读模式
14鱼币
#include <stdio.h>

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

        return 0;
}
最佳答案
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 的作用域。
45.png

最佳答案

查看完整内容

单从语法上说, 第一行红色是因为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 的作用域。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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 的作用域。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-11 22:25:28 | 显示全部楼层
https://www.runoob.com/cprogramming/c-functions.html
我觉得你应该再好好把这个看一遍
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-12 00:21:12 | 显示全部楼层
本帖最后由 superbe 于 2019-12-12 00:22 编辑
  1. #include <stdio.h>
  2. // char mystyle(char *array, int i); //mystyle函数定义在main前面,不必用函数原型

  3. char* mystyle(char *array, int i)    //返回类型为char*
  4. {
  5.     int j;
  6.     char c, *m = array + i - 1;      //m指向array末尾元素
  7.     for (j = 0; j < i / 2; j++, m--){ //交换对称的元素
  8.         c = array[j];
  9.         array[j] = *m;
  10.         *m = c;
  11.     }
  12.     return array;
  13. }
  14. int main()
  15. {
  16.     char num[10];
  17.     int i;
  18.     printf("Enter a string:\n");
  19.     for (i = 0; i < 9 && (num[i] = getchar()) != '\n'; i++);
  20.     num[i] = '\0';
  21.     printf("%s\n", mystyle(num, i));  //num数组名代表首元素地址,不用&

  22.     return 0;
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-12 10:54:01 | 显示全部楼层
遇到这种问题,可以去翻翻资料书,或者网上找找教程,看看人家怎么弄的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-12 22:50:45 | 显示全部楼层

但是我不清楚我的错在了哪里,错误提示:D:\c渔业\未命名1.cpp        [Error] name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]
D:\c渔业\未命名1.cpp        [Note] (if you use '-fpermissive' G++ will accept your code)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-24 09:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表