我收到了一个.o文件,它创建了一个box_t **,我需要使用它。现在,我不知道它是:
情况1:
指向box_t数组的指针或者
情况2:
指向box_t *数组的指针。
我自己编写了一个简单的代码,在两种方式下创建了box_t**并进行了不同的访问。在这两种情况下似乎都正常工作。现在,如果给定一个box_t **和大小为size_t n的元素数,是否有可能在没有进一步信息的情况下知道它是情况1还是情况2?
指向box_t数组的指针或者
情况2:
指向box_t *数组的指针。
我自己编写了一个简单的代码,在两种方式下创建了box_t**并进行了不同的访问。在这两种情况下似乎都正常工作。现在,如果给定一个box_t **和大小为size_t n的元素数,是否有可能在没有进一步信息的情况下知道它是情况1还是情况2?
struct box_tag{
int pencils;
int pens;
};
typedef struct box_tag box_t;
box_t boxarray[10] = {{1,2},{3,4},
{5,6},{7,8},
{9,10},{11,12},
{13,14},{15,16},
{17,18},{19,20}};
box_t ** box_bundle;
版本1的创建:
box_t** create_dp(void)
{
box_bundle = (box_t **)malloc(sizeof(box_t **));
*box_bundle = boxarray;
}
访问版本 1:
int main ()
{
box_t * tmp = *box_bundle;
for (int i =0; i<10; i++)
{
printf("%d\n",tmp[i].pencils);
}
return 0;
}
创作版本 2:
box_t** create_dp (void)
{
box_bundle = (box_t **)malloc(sizeof(box_t **));
*box_bundle = (box_t *)malloc (sizeof(box_t *) * 10);
for(int i=0; i<10;i++)
{
*(box_bundle +i ) = &boxarray[i];
}
}
访问版本2:
int main ()
{
create_dp();
for(int i=0; i<10; i++)
{
box_t * tmp =*box_bundle++;
printf("pencils %d \n", tmp->pencils);
}
return 0;
}
box_t**
指向任何数组”。但是,您可以使用它来模拟2D数组,但这也不是本例的情况。只需忘记所有关于box_t **
的内容,它是针对不同问题的错误工具。 - Lundin