我在尝试将结构指针传递给一个函数时遇到问题,该函数将指针设置为指向多维数组的特定行。
这是结构的声明:
collection.insert({'part_project': 998,
'part_number': 002,
'part_category_prefix': 1,
'part_type': 110,
'part_description': 'Tier 2 Assembly B',
'part_revision': 1,
'part_version': 'A',
'bill_of_material_usages': [{
'bom_version': 'A',
'part_version': 'A',
'part_revision': 1,
'children': [
{'part_number': '998 1 3 100', 'quantity': 3},
{'part_number': '998 1 4 110', 'quantity': 1}
]}]
})
这是功能:
typedef struct PartitionInfoStruct
{
Partition definition;
u16 start;
u16 size;
StringLiteral* desc;
} PartitionInfo;
这就是我的电话:
void readPartitionTable(Partition partition, PartitionInfo* partitionInfo)
{
switch(installedFlashDevice)
{
case S25FL032P:
partitionInfo = &PARTITION_TABLE_S25FL032P[partition];
break;
case SST26VF032B:
partitionInfo = &PARTITION_TABLE_SST26VF032B[partition];
break;
default:
//do nothing
break;
}
ASSERT(partitionInfo != NULL);
}
出于某种原因,在调用 PartitionInfo* partitionInfo = NULL;
readPartitionTable((Partition)counter, partitionInfo);
,然后再解除引用readPartitionTable
之后,我没有得到所需的结果 - 即,ASSERT失败。
答案 0 :(得分:2)
调用readPartitionTable时,然后取消引用partitionInfo 之后,我没有得到所需的结果 - 即ASSERT 失败
如果您在致电partitionInfo
之后取消引用readPartitionTable
,那么这不在您的职能范围之内,那么assert
并非partitionInfo
。失败了。
问题是您的函数正在更改参数的值,即assert
。赋值后,PartitionInfo **
成功,但在函数外部看不到对局部变量或参数的更改。
然而,您可以做的是将指针作为参数并将取消引用。然后你可以读/写它指向的内容,即另一个函数中的变量。因此传入PartitionInfo *
,即void readPartitionTable(Partition partition, PartitionInfo **partitionInfo)
{
switch(installedFlashDevice)
{
case S25FL032P:
*partitionInfo = &PARTITION_TABLE_S25FL032P[partition];
break;
case SST26VF032B:
*partitionInfo = &PARTITION_TABLE_SST26VF032B[partition];
break;
default:
//do nothing
break;
}
ASSERT(*partitionInfo != NULL);
}
的地址来执行此操作:
PartitionInfo* partitionInfo = NULL;
readPartitionTable((Partition)counter, &partitionInfo);
然后你这样称呼它:
MAX