【问题标题】:Can someone please clarify what this is asking me to do?有人可以澄清这是要我做什么吗?
【发布时间】:2020-12-20 19:47:03
【问题描述】:

我了解数组 (int** intptrArray[5]) 和 rand() 数字部分的创建。但是,我不明白中间的那句话 - 我知道我需要先分配数组,然后将数组中的每个指针分配给一个 int 但我不知道该怎么做,我一直卡住几个小时。我需要在这里使用 malloc 吗?我该怎么做?

【问题讨论】:

  • 问你的导师。你的老师无法读懂你的想法,除非你问他或她,否则你不会知道你需要“轻推”。也许你班上的一些人需要澄清这一点!但是,如果你不问他或她,(s)他没有办法知道。
  • 如果我正确理解了这个问题,那么int** intptrArray[5]不是的答案!更有可能的是,您需要int** intptrArray = malloc(5 * sizeof(int*)); 或类似的东西。
  • (是的,我当过讲师,“这是我最讨厌的事情之一。”)

标签: arrays c pointers random allocation


【解决方案1】:

要求

创建一个 int * 数组(即 int **)

是矛盾的。对象可以是数组或指针、指针数组、指向数组的指针或它们的某种组合。但是指针与数组不同,数组不是指针,指针也不是数组。当您访问数组时,它们通常会衰减为指针,但仍有两个不同的概念。

数组可以有int *intptrArray[]类型,int **intptrPtr类型是指向int的指针,这包括指向int的指针数组的指针的可能性,指向指针的指针指向int 的数组或指向int 数组的指针数组的指针。

要求

大小为 5

具有误导性。根据 C 标准,对象的大小以字节为单位。使用int * 创建大小为 5 的数组通常是不可能的,因为在许多平台上指针的大小为 4 或 8 字节。 C 标准不限制指针的可能大小,所以 5 是可能的,但我从未见过支持这一点的机器。我认为他的意思是数组的长度。

我认为最好问问那个给你这个要求的人来澄清。

【讨论】:

    【解决方案2】:

    看来你需要在文件范围内声明一个指针类型的变量 int ** like

    int **intptrArray;
    

    然后在一个函数中(例如在main中)你需要分配一个5类型的int *元素数组

    intptrArray = malloc( 5 * sizeof( int * ) );
    

    然后在循环中,数组的每个元素都应该由一个指针初始化,以便为int类型的一个对象动态分配内存。

    然后使用函数rand 你需要为这些整数赋值。

    例如

    for ( size_t i = 0; i < 5; i++ )
    {
        intptrArray[i] = malloc( sizeof( int ) );
        *intptrArray[i] = rand();
    }
    

    【讨论】:

    • @12431234123412341234123 数组没有 int ** 类型。
    • @12431234123412341234123 在作业中写“(即 int**)” 否则将写成“(即 int *[5])”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2014-05-21
    • 1970-01-01
    • 2017-01-28
    相关资源
    最近更新 更多