나는 이것을 좋아하지 않지만 거의 45 명의 멤버가 내부에있는 구조체를 가지고 있습니다. 모두 문자 또는 문자 배열입니다. 즉, 각 구조체를 초기화하는 방식을 최적화해야합니다. 일반적으로 전체 객체를 init_struct () 함수에 전달하지만 이것이 최선의 방법은 아니라고 생각합니다.
이를 수행하기 위해 구조체에 대한 포인터를 어떻게 만들고 사용합니까?
이전 방법은 다음과 같습니다.
void init_struct(struct general){
...initialize members...
}
int main(){
struct general[10];
for(int i = 0 ; i < 10 ; ++i){
init_struct(general[i];
}
}
이 구조체가 너무 커서 내부에 거의 45 명의 멤버를 말했듯이 구조체에 대한 포인트가이 프로세스를 최적화하는 데 큰 도움이 될 것이라고 생각합니다. 어떻게해야합니까?
필요한 경우를 대비하여 여기에 내 구조체의 typedef가 있습니다.
typedef struct
{
//Basically, everything we want to read from HUDL should be here...
int play_num;
char down;
char dist[3];
char ydln[4];
char gnls[3];
char hash[3];
char home[20];
char away[20];
char odk[2];
char qtr[2];
char series[3];
char result[20];
char penalty[20];
char act_cb[20]; //How do they act post-snap
char act_dl[20];
char act_lb[20];
char act_ol[20];
char act_qb[20];
char act_rb[20];
char act_saf[20];
char aln_cb[20]; //How do they align pre-snap
char aln_dl[20];
char aln_lb[20];
char aln_ol[20];
char aln_qb[20];
char aln_rb[20];
char aln_saf[20];
char aln_wr[20];
char blitz[20];
char box_cnt[3];
char saf_count[20];
char coverage[20];
char cvr_basic[20];
char def_front[20];
char mtn_def[20];
char num_rush[3];
char off_form[20];
char form_var[20];
char motion[20];
char off_pro[20];
char off_play[20];
char play_var[20];
char personnel[20];
char play_type[20];
char time[2];
char score_diff[4];
char field_zone[2];
char dd_type[2];
char form_strength[2];
} HUDL; // MAXIMUM of 63 Members
배열 요소에 대한 포인터를 전달하려면 매개 변수 앞에 &를 붙이고 함수를 올바르게 선언해야합니다.
void init_struct(HUDL* pGeneral){
if ( pGeneral != NULL ) {
//This will ensure the entire structure contains '0'
memset(pGeneral, 0, sizeof(HUDL));
...initialize members...
}
}
int main(){
HUDL general[10];
for( int i=0; i<(sizeof(general) / sizeof(general[0])); i++ ) {
init_struct(&general[i]);
}
}
왜 당신이 typedef 'HUDL'을 사용하지 않았는지 잘 모르겠습니다. 삶을 더 쉽게 잃고 코드를 읽기 쉽게 만듭니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다