조약돌 시계 표면에 11 개의 텍스트 레이어를 만들고 싶습니다. 루프가 없으면 코드는 다음과 유사합니다.C : 포인터 배열을 사용하여 고정 된 수의 개체를 생성하는 방법
static TextLayer *time_layer_a;
static TextLayer *time_layer_b;
... 등등.
루프로 이것을 수행하고 목록의 객체에 대한 포인터를과 같은 구조로 만들 수 있습니까?
목록 : 포인터 모음은 고정 된 수의 텍스트 레이어가있는 디스플레이를위한 것이므로이 경우 배열 또는 체인이 더 좋은 단어입니다. 또한 프로그램 기간 동안 레이어 수는 변경되지 않습니다. C에서 목록은 동적으로 크기를 조정할 수있는 구조입니다. "list like"를 사용하면 도움이되는 사람들이 찾고자하는 연쇄 방식이 동적 일 것으로 예상된다는 가정을 오도 할 수 있습니다. 이것은 정확하지 않습니다. 고정 된 메모리 할당을 사용하는 구조가 선호됩니다.
편집 : John3136에서 제안한 배열이 완벽하게 작동했습니다. 배열에는 감속과 함께 객체 포인터를 생성하는 추가 이점이 있습니다. 그리고 John3136이 코드를 배열의 크기에 맞게 자동으로 조정할 수있는 방법을 제공했습니다. 이것은 유용한 도구입니다.
내 시계 모드의 텍스트 레이어를 만들 때 적용되는 코드입니다.
선언 :
int i;
static TextLayer* layers[11];
로딩 방법 :
// by John3136
// Note the sizeof() stuff means this works unchanged even if you change
// the number of layers.
for(i = 0; i < (short)(sizeof(layers)/sizeof(layers[0])); i++) // (short) converts unsigned interger to +- int
{
layers[i] = text_layer_create(GRect((bounds.size.w/4)*((i + 1)%4),
(bounds.size.h/PBL_IF_ROUND_ELSE(5,4))*((i > 2)
? ((i > 6)
? 3
: 2)
: 1),
(bounds.size.w/4) ,(bounds.size.h/PBL_IF_ROUND_ELSE(5,4))));
}
하역 방법 : 우리가 알고있는 귀하의 요구 사항을 충족
for(i = 0; i < (short)(sizeof(layers)/sizeof(layers[0])); i++)
{
text_layer_destroy(layers[i]);
}
당신이 무엇을 달성하고자하는 분명하지 않다 :
그런 다음에 채울 수 있습니다. 이미 일부 코드가 있으므로 분명히 [mcve]를 입력하십시오. 또한 [ask]를 배우고 필요한 정보를 제공하십시오. – Olaf
이 질문을 포괄적이고 포괄적 인 예제로 확장하면 불필요한 혼란이 생길 수 있습니다. 나는이 질문이 그렇듯이 괜찮다고 생각한다. – hugomg
@Olaf, C에서 첫 번째 프로그램을 작성 중입니다. C의 모든 구조 또는 가장 적합한 구조를 아직 모릅니다. 나는 내가 "목록처럼"있는 것을 찾고 있다는 것을 알았다. 그 당시 내가 할 수있는 최선이었습니다. 배열이 잘 작동한다는 것을 알았다면 배열을 요청했을 것입니다. – kjl