鱼C论坛

 找回密码
 立即注册
查看: 2073|回复: 28

[已解决]数组指针指向数组与函数问题

[复制链接]
发表于 2022-7-25 20:51:09 | 显示全部楼层 |阅读模式
20鱼币
题目是:定义一个数组,里面的值随便填,然后定义一个数组指针指向这个数组,然后从小到大排列数组中的元素。

我的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<unistd.h>
#include<string.h>

void cop(int (*a)[],int b);
void ran(int (*a)[],int b);

void ran(int (*a)[],int b)
{
    srand(time(0));
    for(int i=0;i<b;i++)
    {
        *((*a)+i)=rand()%150;
        //sleep(1);
    }

    for(int i=0;i<b;i++)
    {
        printf("%d ",(*a)[i]);
    }
    putchar('\n');
}

void cop(int (*a)[],int b)
{
    int temp=0;
    for(int i=0;i<b-1;i++)
    {
        for(int j=i+1;j<b;j++)
        {
            if((*a)[i]>(*a)[j])
            {
                temp=(*a)[j];
                (*a)[j]=(*a)[i];
                (*a)[i]=temp;
            }     
        }
    }

    for(int i=0;i<b;i++)
    {
        printf("%d ",(*a)[i]);
    }
   
    putchar('\n');
}

int main()
{
    int b=0;
    printf("请输入数组数字个数:");
    scanf("%d",&b);
    int a[b];
    int (*p)[b]=&a;

    ran(p,b);
    cop(p,b);

    return 0;
}


虽然最后可以正常运行,但是会出现“已放弃”,有好心的大佬可以告诉我是代码哪里错了,该怎么改,为什么怎么改?
最佳答案
2022-7-25 20:51:10
1449620085 发表于 2022-7-26 09:08
可是我是好奇linux为什么会报错

确实挺奇怪的,我这边一切正常

  1. $ cat main.c
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #include<unistd.h>
  6. #include<string.h>

  7. void cop(int (*a)[],int b);
  8. void ran(int (*a)[],int b);

  9. void ran(int (*a)[],int b)
  10. {
  11.     srand(time(0));
  12.     for(int i=0;i<b;i++)
  13.     {
  14.         *((*a)+i)=rand()%150;
  15.         //sleep(1);
  16.     }

  17.     for(int i=0;i<b;i++)
  18.     {
  19.         printf("%d ",(*a)[i]);
  20.     }
  21.     putchar('\n');
  22. }

  23. void cop(int (*a)[],int b)
  24. {
  25.     int temp=0;
  26.     for(int i=0;i<b-1;i++)
  27.     {
  28.         for(int j=i+1;j<b;j++)
  29.         {
  30.             if((*a)[i]>(*a)[j])
  31.             {
  32.                 temp=(*a)[j];
  33.                 (*a)[j]=(*a)[i];
  34.                 (*a)[i]=temp;
  35.             }
  36.         }
  37.     }

  38.     for(int i=0;i<b;i++)
  39.     {
  40.         printf("%d ",(*a)[i]);
  41.     }

  42.     putchar('\n');
  43. }

  44. int main()
  45. {
  46.     int b=0;
  47.     printf("请输入数组数字个数:");
  48.     scanf("%d",&b);
  49.     int a[b];
  50.     int (*p)[b]=&a;

  51.     ran(p,b);
  52.     cop(p,b);

  53.     return 0;
  54. }
  55. $ gcc-debug -o main main.c
  56. $ ./main
  57. 请输入数组数字个数:6
  58. 10 3 97 60 125 104
  59. 3 10 60 97 104 125
  60. $ ./main
  61. 请输入数组数字个数:7
  62. 37 41 36 126 0 79 92
  63. 0 36 37 41 79 92 126
  64. $ ./main
  65. 请输入数组数字个数:8
  66. 82 83 123 49 25 18 48 20
  67. 18 20 25 48 49 82 83 123
  68. $ ./main
  69. 请输入数组数字个数:20
  70. 29 102 51 29 57 133 63 120 15 16 135 138 109 117 23 132 72 138 140 121
  71. 15 16 23 29 29 51 57 63 72 102 109 117 120 121 132 133 135 138 138 140
  72. $ gcc --version
  73. gcc (GCC) 12.1.0
  74. Copyright (C) 2022 Free Software Foundation, Inc.
  75. This is free software; see the source for copying conditions.  There is NO
  76. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  77. $ uname -a
  78. Linux Suhuajun-Archlinux 5.18.9-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 02 Jul 2022 21:03:06 +0000 x86_64 GNU/Linux
  79. $
复制代码

编译没有报错,当运行时出现这些错误。

编译没有报错,当运行时出现这些错误。

最佳答案

查看完整内容

确实挺奇怪的,我这边一切正常
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-25 20:51:10 | 显示全部楼层    本楼为最佳答案   
1449620085 发表于 2022-7-26 09:08
可是我是好奇linux为什么会报错

确实挺奇怪的,我这边一切正常

  1. $ cat main.c
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #include<unistd.h>
  6. #include<string.h>

  7. void cop(int (*a)[],int b);
  8. void ran(int (*a)[],int b);

  9. void ran(int (*a)[],int b)
  10. {
  11.     srand(time(0));
  12.     for(int i=0;i<b;i++)
  13.     {
  14.         *((*a)+i)=rand()%150;
  15.         //sleep(1);
  16.     }

  17.     for(int i=0;i<b;i++)
  18.     {
  19.         printf("%d ",(*a)[i]);
  20.     }
  21.     putchar('\n');
  22. }

  23. void cop(int (*a)[],int b)
  24. {
  25.     int temp=0;
  26.     for(int i=0;i<b-1;i++)
  27.     {
  28.         for(int j=i+1;j<b;j++)
  29.         {
  30.             if((*a)[i]>(*a)[j])
  31.             {
  32.                 temp=(*a)[j];
  33.                 (*a)[j]=(*a)[i];
  34.                 (*a)[i]=temp;
  35.             }
  36.         }
  37.     }

  38.     for(int i=0;i<b;i++)
  39.     {
  40.         printf("%d ",(*a)[i]);
  41.     }

  42.     putchar('\n');
  43. }

  44. int main()
  45. {
  46.     int b=0;
  47.     printf("请输入数组数字个数:");
  48.     scanf("%d",&b);
  49.     int a[b];
  50.     int (*p)[b]=&a;

  51.     ran(p,b);
  52.     cop(p,b);

  53.     return 0;
  54. }
  55. $ gcc-debug -o main main.c
  56. $ ./main
  57. 请输入数组数字个数:6
  58. 10 3 97 60 125 104
  59. 3 10 60 97 104 125
  60. $ ./main
  61. 请输入数组数字个数:7
  62. 37 41 36 126 0 79 92
  63. 0 36 37 41 79 92 126
  64. $ ./main
  65. 请输入数组数字个数:8
  66. 82 83 123 49 25 18 48 20
  67. 18 20 25 48 49 82 83 123
  68. $ ./main
  69. 请输入数组数字个数:20
  70. 29 102 51 29 57 133 63 120 15 16 135 138 109 117 23 132 72 138 140 121
  71. 15 16 23 29 29 51 57 63 72 102 109 117 120 121 132 133 135 138 138 140
  72. $ gcc --version
  73. gcc (GCC) 12.1.0
  74. Copyright (C) 2022 Free Software Foundation, Inc.
  75. This is free software; see the source for copying conditions.  There is NO
  76. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  77. $ uname -a
  78. Linux Suhuajun-Archlinux 5.18.9-arch1-1 #1 SMP PREEMPT_DYNAMIC Sat, 02 Jul 2022 21:03:06 +0000 x86_64 GNU/Linux
  79. $
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-26 07:01:05 From FishC Mobile | 显示全部楼层
scanf("%d",&b);
    int a[b];
这不是动态数组吗,不允许这样写

评分

参与人数 1鱼币 +5 收起 理由
1449620085 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-26 08:04:25 | 显示全部楼层
结果不是正确的么?你管那些报错干什么?codeblock就没有报错 1658793819362.jpg

评分

参与人数 1鱼币 +5 收起 理由
1449620085 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-26 08:05:19 | 显示全部楼层
定义数组指针的话,应该是*和数组名字吧。你的第7、8两行定义的时候,int后面加的数组指针名字(*a)[]是不是应该写成(*a[])?  我还没学到这一节,很可能说的是错的。

评分

参与人数 1鱼币 +5 收起 理由
1449620085 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-26 09:02:40 | 显示全部楼层
wp231957 发表于 2022-7-26 07:01
scanf("%d",&b);
    int a;
这不是动态数组吗,不允许这样写

可是我记得在“啪啪啪”那节中小甲鱼证明可以这样写啊,我只是好奇为什么linux会报错。,。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-26 09:03:32 | 显示全部楼层
顶级太阳 发表于 2022-7-26 08:05
定义数组指针的话,应该是*和数组名字吧。你的第7、8两行定义的时候,int后面加的数组指针名字(*a)[]是不 ...

我这样写是没问题的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-26 09:08:23 | 显示全部楼层
桃花飞舞 发表于 2022-7-26 08:04
结果不是正确的么?你管那些报错干什么?codeblock就没有报错

可是我是好奇linux为什么会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-26 10:09:27 | 显示全部楼层
人造人 发表于 2022-7-26 09:59
确实挺奇怪的,我这边一切正常

刚才我又在Linux上试了下,居然没报错了,那昨晚是真的很奇怪。,。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-16 19:39:00 | 显示全部楼层
@FishC 为什么会出现这个错误呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-16 19:39:13 | 显示全部楼层
1449620085 发表于 2023-12-16 19:39
@FishC 为什么会出现这个错误呢?

哈哈,不好意思,您没有告诉我具体的错误信息。编程中出现错误是很正常的,有时候可能是因为语法错了,有时候可能是因为逻辑错了。无论是哪种错误,都需要我们去找出问题所在并进行修复。

首先,如果您能提供具体的错误信息,那就更好了。错误信息通常会告诉您出错的位置和原因,这样我们可以更快地定位问题。

如果您没有错误信息,那我们可以从基本的问题入手,比如看一下代码是否有明显的语法错误。语法错误通常是拼写错误、缺少括号、冒号等等。如果代码没有明显的错误,并且也没有错误信息,那就需要我们去审视一下代码的逻辑了。

逻辑错误通常是因为我们没有按照预期的方式编写代码,或者是我们的理解有误。解决逻辑错误的方法是仔细审视代码,并逐行逐段地进行调试。可以通过输出一些中间结果来帮助我们理解代码的执行流程。

最后,记住,错误是学习的机会。每次遇到错误都是进步的一部分。只要我们坚持分析和解决问题,我们就能够不断成长。加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-16 19:41:23 | 显示全部楼层
FishC 发表于 2023-12-16 19:39
哈哈,不好意思,您没有告诉我具体的错误信息。编程中出现错误是很正常的,有时候可能是因为语法错了,有 ...

请写一篇关于智能农业的系统的论文引言
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-16 19:41:45 | 显示全部楼层
1449620085 发表于 2023-12-16 19:41
请写一篇关于智能农业的系统的论文引言

智能农业系统的论文引言如下:

引言

随着全球人口的不断增长和气候变化的持续影响,传统的农业模式面临着巨大的压力。为了满足不断增长的粮食需求,提高农作物的产量和质量,并减少对环境的不良影响,农业领域亟需创新的解决方案。在这一背景下,智能农业系统应运而生,成为推动农业可持续发展的重要工具之一。

智能农业系统是利用先进的传感器、无线通信、大数据分析和自动化技术,对农作物生长环境和农业过程进行实时监测、分析和控制的系统。通过实时获取土壤湿度、温度、光照等环境信息,并结合农作物生长模型和农艺知识,智能农业系统可以根据农作物的需求提供精确的灌溉、施肥、病虫害防治等农业管理措施,从而最大限度地提高农作物的生长效率和产量。

此外,智能农业系统还可以实现农业自动化,减少对人力资源的依赖,并提高生产效率。通过自动化的设备和机器人,如自动播种机、无人驾驶的农机、智能收割机等,可以实现农作物的全程自动化管理和生产过程的优化。同时,智能农业系统可以结合大数据分析技术,对农作物生长数据、环境数据和市场需求进行深入分析,为农民提供决策支持和精准农业服务,提高农业生产的智能化水平。

本论文旨在探讨智能农业系统的关键技术和应用,研究其对农业可持续发展和食品安全的贡献。我们将重点分析智能农业系统的传感器技术、数据分析算法、自动化设备和农业决策支持系统,并通过实验研究验证其效果和可行性。最终,我们希望为农业领域的决策者、科研人员和农民们提供有益的参考和启示,推动智能农业系统的广泛应用,实现农业的高效、可持续发展,为人类社会的繁荣做出贡献。

关键词:智能农业系统、传感器技术、数据分析算法、自动化设备、决策支持系统

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-18 09:17:00 | 显示全部楼层
FishC 发表于 2023-12-16 19:41
智能农业系统的论文引言如下:

引言

写一篇关于智能农业系统的论文
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-18 09:17:29 | 显示全部楼层
1449620085 发表于 2023-12-18 09:17
写一篇关于智能农业系统的论文

论文标题:智能农业系统:现状、挑战与前景

摘要:
随着全球人口的不断增长和气候变化的持续影响,传统农业模式面临着巨大的压力。为了满足人类粮食需求、提高农作物产量和质量,并减少对环境的不良影响,智能农业系统成为重要的解决方案之一。本论文综合分析了智能农业系统的现状、挑战和未来发展前景。

第一部分:引言
1.1 研究背景
1.2 研究目的和意义

第二部分:智能农业系统概述
2.1 智能农业系统定义
2.2 智能农业系统组成部分
2.3 智能农业系统的特点和优势

第三部分:智能农业系统中的关键技术
3.1 传感器技术
3.2 物联网技术
3.3 大数据和人工智能技术
3.4 自动化设备和机器人技术
3.5 决策支持系统

第四部分:智能农业系统应用案例及效果评估
4.1 智能灌溉系统
4.2 智能施肥系统
4.3 智能病虫害监测与防治系统
4.4 智能作物生长预测与管理系统

第五部分:智能农业系统面临的挑战
5.1 技术挑战
5.2 数据隐私和安全问题
5.3 成本与可持续性问题

第六部分:智能农业系统的前景与展望
6.1 农业可持续发展
6.2 食品安全与精准农业
6.3 农业与城市发展的融合

第七部分:结论
7.1 研究总结
7.2 发展建议

参考文献

关键词:智能农业系统、传感器技术、物联网技术、大数据、自动化设备、决策支持系统、农业可持续发展、食品安全、精准农业

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-20 18:27:45 | 显示全部楼层
FishC 发表于 2023-12-16 19:41
智能农业系统的论文引言如下:

引言

-1,0,7,26,  ,124   
空位是什么数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-20 18:27:56 | 显示全部楼层
1449620085 发表于 2023-12-20 18:27
-1,0,7,26,  ,124   
空位是什么数

根据给出的数列:-1,0,7,26, ,124,我们可以观察到每个数之间都是通过乘以一个较小的数再加上一个常数得到的。根据这个规律,我们可以推测空位上的数应该是:

26 * (1) + 1 = 27

因此,空位上的数应该是27。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-20 18:29:38 | 显示全部楼层
FishC 发表于 2023-12-20 18:27
根据给出的数列:-1,0,7,26, ,124,我们可以观察到每个数之间都是通过乘以一个较小的数再加上一个常 ...

是不是规律找错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-20 18:29:49 | 显示全部楼层
1449620085 发表于 2023-12-20 18:29
是不是规律找错了

非常抱歉,我之前的回答有误。

根据给出的数列:-1,0,7,26, ,124,我们可以观察到每个数之间的差是通过加上一个递增的序列得到的。根据这个规律,我们可以推测空位上的数应该是:26 + (递增序列)。

在这个例子中,递增序列为:7-0 = 7, 26-7 = 19。因此,空位上的数应该是:26 + 19 = 45。所以空位上的数是45。我之前的回答是错误的,请忽略。非常抱歉给您带来的困惑。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-23 15:11:21 | 显示全部楼层
@FishC 虚幻5怎么下载?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 19:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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