[英]Referencing the values in pointers to arrays (c)
注意:固定(在底部的十进制)
由于某种原因,以下代码:
(*p_to_array)[m_p->number_of_match_positions] = (*p_to_temp_array)[k];
类型是:
match_pos_t (*p_to_array)[];
match_pos_t (*p_to_temp_array)[];
int number_of_match_positions;
int k;
顺便说一句:match_pos_t是一个结构:
typedef struct match_pos
{
char* string;
long match_position;
}match_pos_t;
在'('error'之前导致'syntax error
如果此代码被其他代码替换,则不会发生此错误。
有人可以告诉我为什么这会导致语法错误,以及如何解决此问题吗?
整个相关代码:
typedef struct match_pos
{
char* string;
long match_position;
}match_pos_t;
typedef struct match_positions
{
int number_of_match_positions;
match_pos_t (*match_positions)[];
}match_positions_t;
typedef struct search_terms
{
int number_of_search_terms;
char* search_terms[];
}search_terms_t;
int BMH_string_search(char* search_string, char* file_string, match_positions_t* match_positions)
{
return 0;
}
int determine_match_pos(search_terms_t** s_terms, char* file, match_positions_t* m_p)
{
int i,j,k;
match_positions_t* temp_m_p;
i=0;
/* s_terms is a null terminated data structure */
while((*s_terms+i) != NULL)
{
for(j=0; j<(*s_terms+i)->number_of_search_terms; j++)
{
/* search for the string positions */
BMH_string_search((*s_terms+i)->search_terms[j], file, temp_m_p);
/* load out search positions into the return array */
if(temp_m_p->number_of_match_positions != 0)
{
int total_m_ps = m_p->number_of_match_positions + temp_m_p->number_of_match_positions;
m_p->match_positions = (match_pos_t (*)[])realloc(m_p->match_positions, sizeof(match_pos_t)*total_m_ps);
k = 0;
for( ; m_p->number_of_match_positions<total_m_ps; m_p->number_of_match_positions++)
{
(*(m_p->match_positions))[m_p->number_of_match_positions] = (*(temp_m_p->match_positions))[k];
k++;
}
}
free(temp_m_p);
}
i++;
}
return 0;
}
看来我很傻。 在引用的值周围附加括号可以解决问题(问题代码已通过修复进行更新):原始代码:
(m_p->*match_positions)[m_p->number_of_match_positions] = (temp_m_p->*match_positions)[k];
固定:
(*(m_p->match_positions))[m_p->number_of_match_positions] = (*(temp_m_p->match_positions))[k];
但是,如果有人对为什么第一个错误而不是第二个错误有一个解释,我会很高兴听到,因为我认为
object->*object2
与...相同
*(object->object2)
这是正确的还是我在这里缺少一些c定义?
我以为
*(object->object2)
object->*object2
与*(object->object2)
不,在C中.
->
运算符期望将标识符作为其正确的操作数。 .*
和->*
运算符在C中不存在,您必须手动拼写*(structure.member)
或*(structure_ptr->member)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.