在C中设置和获取typedef结构中的数组值

时间:2014-11-30 12:04:03

标签: c arrays struct typedef

intarr_t的定义:

typedef struct {
    int* data;
    unsigned int len;
} intarr_t;

首先,我需要为给定的数组索引设置一个值,并相应地返回typedef' d状态代码。

我为数组设置值的工作是:

intarr_result_t intarr_set( intarr_t* ia, 
                unsigned int index, 
                int val )
{
    if(ia == NULL)  // if ia is null
    {
        return INTARR_BADARRAY;
    }

    unsigned int len = ia->len;

    if(index >= 0 && index < len)   // if index is valid
    {
        ia[index].data = &val;  // set value at ia[index] to val

        return INTARR_OK;
    }
    else    // if index is not valid
    {
        return INTARR_BADINDEX;
    }
}

其次,我需要将数组的值设置为指针变量。

我获得价值的工作是:

intarr_result_t intarr_get( const intarr_t* ia, 
                unsigned int index, 
                int* i )
{
    if(ia == NULL)
    {
        return INTARR_BADARRAY;
    }

    unsigned int len = ia->len;

    if((index >= 0 && index < len) && i != NULL)
    {
        i = ia[index].data;

        return INTARR_OK;
    }
    else
    {
        return INTARR_BADINDEX;
    }
}

在测试自己时,我从我设置的值中得到一个值,但是自动标记表示在每个函数的相同索引处返回的值彼此不同。我不知道我哪里做错了以及我该如何解决它。请帮帮我。

2 个答案:

答案 0 :(得分:0)

您正在存储指向局部变量的指针:

ia[index].data = &val;

int val在函数上下文之外不存在,因此你不应该引用它。

如果要存储指针,请更改功能标题:

intarr_result_t intarr_set( intarr_t* ia,
                            unsigned int index, 
                            int* ptr )

并确保在调用intarr_get

时对象ptr指向仍然存在

答案 1 :(得分:0)

更改

ia[index].data = &val; 
...
i = ia[index].data;

ia->data[index] = val; 
...
*i = ia->data[index];