source

C 어레이를 반복합니다.

goodcode 2022. 8. 14. 11:58
반응형

C 어레이를 반복합니다.

내 프로그램 어딘가에 내가 만든 구조들이 있다.

나중에 그것을 반복하고 싶지만 배열 크기가 없습니다.

어떻게 반복할 수 있을까요?아니면 사이즈를 어딘가에 보관해야 하나요?

컴파일 시에 어레이의 크기를 알 수 있는 경우 구조 크기를 사용하여 요소의 수를 결정할 수 있습니다.

struct foo fooarr[10];

for(i = 0; i < sizeof(fooarr) / sizeof(struct foo); i++)
{
  do_something(fooarr[i].data);
}

컴파일 시 알 수 없는 경우 크기를 저장하거나 어레이 끝에 특별한 터미네이터 값을 생성해야 합니다.

크기를 어딘가에 저장할 수도 있고 감시용으로 사용하는 특별한 값 세트를 가진 구조체를 만들 수도 있습니다.\0문자열의 끝을 나타냅니다.

사정에 따라 다르겠지.동적으로 할당된 어레이인 경우, 즉 malloc를 호출하여 작성한 경우, 다른 사용자의 제안대로 어레이 크기/요소 수를 저장하거나 Sentinel(특수 값을 가진 구조, 이것이 마지막이 됩니다)을 보유해야 합니다.

정적 배열의 경우 크기/1개의 요소의 크기를 지정할 수 있습니다.예를 들어 다음과 같습니다.

int array[10], array_size;
...
array_size = sizeof(array)/sizeof(int);

글로벌하지 않는 한 어레이를 초기화한 범위에서만 동작합니다.다른 함수에 붙여넣으면 포인터로 분해되기 때문입니다.

도움이 됐으면 좋겠다.

사이즈는 어딘가에 보관해야 할 것 같아요.

어레이 길이를 결정하기 위한 null-terminated-string 모델은 좋지 않습니다.예를 들어 어레이의 사이즈를 취득하는 것은 O(N)가 됩니다.그렇지 않으면 O(1)가 될 가능성이 매우 높아집니다.

단, glib의 어레이가 좋은 솔루션이 될 수 있습니다.또한 아이템을 추가해야 할 경우 자동으로 확장되는 장점이 있습니다.

추신: 솔직히 말해서, 저는 입버릇을 많이 쓰지 않았지만, 저는 그것이 (매우) 평판이 좋은 도서관이라고 생각합니다.

언급URL : https://stackoverflow.com/questions/1597830/iterate-through-a-c-array

반응형