如何使指针指向数组中的所有元素?

时间:2018-05-30 05:56:54

标签: c pointers

我正在尝试编写一个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中的所有元素?

1 个答案:

答案 0 :(得分:2)

我完全迷失在代码的演示中。这绝不是一个好问题,这可能不是正确答案,也可能是正确的,但可能有更多错误......

为什么这样做:

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]; < / p>