C의 각 루프에 대해
다음 내용은 C 언어가 for-each
루프를 지원하는지 여부를 조사합니다. 먼저 루프가 무엇인지 정확히 알아야 합니다.
프로그래밍 언어의 루프
프로그래밍 언어로 된 문장 또는 단어 모음의 실행은 여러 번 수행하도록 반복될 수 있으며 반복 횟수는 조건 평가의 결론에 따라 결정됩니다. 루프 내에서 명령문이 실행되려면 결과 조건이 충족되어야 합니다.
컬렉션 구성 요소를 반복하는 것은 for-each
루프를 사용하여 수행할 수 있습니다. 컬렉션은 목록 또는 배열일 수 있습니다.
배열의 각 요소에 대한 작업을 수행합니다.
C의 for-each
루프
for-each
구문은 C에서 지원되지 않으며 구현할 수 없습니다. 점 표기법을 사용하여 배열을 구문 분석할 때 수신기는 배열의 길이를 알지 못합니다.
따라서 배열의 끝에 도달한 시점을 확인할 방법이 없습니다. C의 int*
변수는 int
를 포함하는 메모리의 위치에 대한 포인터임을 기억하십시오.
헤더 객체는 순서대로 배열된 숫자의 개수에 대한 정보를 가지고 있지 않으며, 이는 없기 때문입니다. 결과적으로 프로그래머는 이것을 추적해야 합니다.
반면에 목록으로 작업할 때 for-each
루프와 유사하게 작동하는 것을 만드는 것은 간단합니다.
for (Node* node = head; node; node = node.next) {
// Your logic will be here
}
배열을 사용하여 동일한 작업을 수행하기 위해 이 두 가지 중 하나를 수행할 수 있는 옵션이 있습니다.
- 배열의 길이는 배열의 첫 번째 멤버에 저장되어야 합니다.
- 배열의 길이와 배열 자체에 대한 참조를 저장하는
struct
내부에 배열을 캡슐화합니다.
이러한 구조 중 하나가 다음 예에 나와 있습니다.
typedef struct job_t {
int countvariable;
int* arr;
} arr_t;
매크로를 사용하여 C에서 for-each
루프 구현
또한 매크로를 사용하여 코드를 단순화하고 더 쉽게 이해하고 작성할 수 있습니다. 일부 데이터 구조의 경우 C에서 for-each
구문을 구현하는 매크로를 작성할 수 있습니다.
이 개념을 더 잘 이해하기 위해 다음 예제를 살펴보겠습니다.
#include <stdio.h>
int main() {
#define FOREACH(item, arr, start, size) \
for (int i = start, keep = 1; keep && i < size; keep = !keep, i++) \
for (item = arr[i]; keep; keep = !keep)
int arr[] = {3, 9, 7, 1, 8};
FOREACH(int z, arr, 3, 7)
printf("Shanii Demo index: %d. element: %d\n", i, z);
}
이제 start
인덱스와 size
를 정의하여 쇠퇴하는 배열 포인터에서 작동하도록 할 수 있습니다. int*
는 필요하지 않으며 count!= size
는 사용자가 실수로 i
를 size
보다 크게 변경하여 끝없는 루프에 걸릴 경우를 대비하여 size
를 i<size
로 변경하였습니다.
출력:
Shanii Demo index: 3. element: 1
Shanii Demo index: 4. element: 8
Shanii Demo index: 5. element: 32766
Shanii Demo index: 6. element: -1762484992
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn