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