【问题标题】:How can I make a pointer point to all the elements in an array?如何使指针指向数组中的所有元素?
【发布时间】:2018-05-30 05:56:54
【问题描述】:

我正在尝试编写一个 C 代码,其中一个指针可以指向数组中的所有元素。但是,在我取消引用指针后,我得到了 Segmentation Fault 错误。

我的代码如下:

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

void func_equal(int32_t *input, uint8_t *output)
{
    for (int i= 0; i < 4; i++)
    {
        output[i]= input[i]; 
    }
}

int main()
{
    uint8_t* my_point;
    int32_t someNum[4];

    for (int i= 0; i < 4; i++)
    {
        someNum[i]= 2 + (4*i);
    }

    func_equal(someNum, my_point);

    printf("my_point (dereferenced) is %d\n", *(my_point));
    printf("---------\n");

    for (int i= 0 ; i < 4; i++)
    {
        printf("my_point (dereferenced) is %d\n", *(my_point+i));
    }

    return 0;
}

从我的代码中可以看出,我创建了一个名为my_point 的指针,我想让它指向数组someNum。但是,当我运行代码 here 时,我得到以下输出:

my_point (dereferenced) is 2                                                                                                   
---------                                                                                                                      
Segmentation fault

如何修改my_point 以指向someNum 中的所有元素?

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    我完全沉浸在您的代码演示中。这绝不是一个好问题,这可能不是正确的答案,或者它可能是正确的,但可能还有更多的错误......

    你为什么这样做:

    YCbCr_MCU[0]= &(color[x].YCbCr_MCU[0]);
    YCbCr_MCU[1]= &(color[x].YCbCr_MCU[1]);
    YCbCr_MCU[2]= &(color[x].YCbCr_MCU[2]);
    

    这看起来像您在数组中的三个指针指向在数组中排序的变量。为此,只需一个指针就足够了。

    uint8_t *YCbCr_MCU =  &(color[x].YCbCr_MCU[0])
    

    从此时起,您可以仅通过指针访问所有成员,并且这些条件将成立:

    YCbCr_MCU[0] == color[x].YCbCr_MCU[0];
    YCbCr_MCU[1] == color[x].YCbCr_MCU[1];
    YCbCr_MCU[2] == color[x].YCbCr_MCU[2];
    

    这样可以更轻松地处理代码。

    真正的问题似乎在这里:

    uint8_t *MCU_Y = YCbCr_MCU[0]; // here YCbCr_MCU[0] is a pointer so this is valid.
    ....
    index = i * (8 * nb_MCU_H)  + j;
    R = (MCU_Cr[index] - 128) * 1.402f + MCU_Y[index]; // look at the MCU_Y here
    

    对于除0 之外的每个索引,这是无效的(更准确地说,12 可以得到 color[x].YCbCr_MCU[1];color[x].YCbCr_MCU[1];

    【讨论】:

    • 评论不用于扩展讨论;这个对话是moved to chat
    • @JHBonarius 移动两个 cmets 进行聊天确实没有必要。这是浪费时间。
    • @JHBonarius 你标记了倒数第二条评论,要求他们被转移到聊天中。哪些cmets?它是如何过度调节的?将 cmets 移动到聊天中是完全无害的。
    • @YvetteColomb 对不起,我标记了 cmets 的混乱(我只是在底部随机取了一个)。我没有进一步说明应该从哪里移动它(因为我没有想到)。我不觉得有任何高价值的东西丢失了,因为这个 QA 中的一切似乎都是徒劳的。
    • @KamiKaze 啊是的,是你标记了评论。我认为将它们全部放入聊天中不会有什么坏处。你同意吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多