试图颠倒array.然后把它打印出来

我试图通过从数组的最后一个元素缩进到第一个元素并将其复制到另一个数组来反转array.arra将是反转数组:

以下是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num, *arr, i;
    scanf("%d", &num);
    arr = (int *)malloc(num * sizeof(int));
    for (i = 0; i < num; i++) {
        scanf("%d", arr + i);
    }
    
    int arra[] = {};
    /* Write the logic to reverse the array. */
    arra[0] = *(arr + num);
    for (int k = 1; k == num; k++) {
        int j = 1;
        arra[j] = *(arr + num -k);
        j++;
    }

    for (i = 0; i < num; i++)
        printf("%d ", *(arra + i));
    return 0;
}

推荐答案

首先,这份声明

int arra[] = {};

在C和C++中无效.

您应该定义数组,还应该像第一个数组一样为它动态分配内存,或者在最坏的情况下,您可以定义一个可变长度的数组(假设编译器支持VLA),如下所示

int arra[num];

这是for循环

for(int k = 1; k == num; k++){

num最初设置为1时,将仅迭代一次.

同样在循环体中,变量j是在循环的每次迭代中创建的(假设循环的条件将被正确更新),其值为1

    int j = 1;
    arra[j] = *(arr + num -k);
    j++;

因此,这一声明

    arra[j] = *(arr + num -k);

在循环的每一次迭代中相当于

    arra[1] = *(arr + num -k);

这说不通.

要使用指针将一个数组复制到另一个数组中,for循环可以如下所示

for ( int *src = arr, *dsn = arra + n; src != arr + n; ++src )
{
    *--dsn = *src;
}

C++相关问答推荐

如何将FileFilter添加到FileDialog GTK 4

编译SDL 2时缺少SDL_ttf

从内联程序集调用Rust函数和调用约定

有没有更简单的方法从用户那里获取数据类型来计算结果

编译的时候g++通常会比GCC慢很多吗?

将指针作为参数传递给函数

正在try 将文件/文件夹名从目录 struct 存储到链接列表

在C中将通用字符名称转换为UTF-8

fwrite无法写入满(非常大)缓冲区

用gcc-msse 2编译的C程序包含AVX 1指令

在移动数组元素时获得意外输出

使用TCL C API导航到列表中的元素

在编写代码时,Clion比vscode有更多的问题指示器

当b是无符号字符时,int a=(b<;<;2)>;>;2;和int a=b&;0x3F;之间有什么区别?

不确定如何处理此编译错误

无算术运算符和循环的二进制乘法

被调用方函数内部的C-Struct变量,它是指针还是无关紧要

使用邻接表创建图

比 * 更快的乘法

运行以下 C 程序时出现分段错误