programing

'for' 루프 내부의 'for' 루프가 동일한 카운터 변수 이름을 사용할 수 있습니까?

newsource 2022. 9. 26. 23:02

'for' 루프 내부의 'for' 루프가 동일한 카운터 변수 이름을 사용할 수 있습니까?

를 「」에 할 수 ?for를 틀다for 루우프? 루우프?

니면변 변수 ?로 ?? ????다음 코드가 두 번째 루프에 대해 다음과 같은 다른 변수를 사용하는 경우j 「」입니다.i

for(int i = 0; i < 10; i++)
{
  for(int i = 0; i < 10; i++)
  {
  }
}

같은 이름(식별자)을 사용할 수 있습니다.그것은 다른 대상이 될 것이다.그들은 서로 영향을 미치지 않을 것이다.내부 루프 내에서는 외부 루프에서 사용되는 객체를 참조할 방법이 없습니다(포인터 포인터를 제공하는 등 특별한 준비를 하지 않는 한).

이것은 일반적으로 나쁜 스타일이며 혼동하기 쉬우므로 피해야 합니다.

정의되어 있는 에만 사물이 .int i보여드렸습니다.새로운 오브젝트를 정의하지 않고 같은 이름을 사용하면 루프는 같은 오브젝트를 사용하여 서로 간섭합니다.

째,, 이이이이 로로로로합합 코드가 컴파일되어 실행되며, 네스트된 루프의 본문을 10×10=100회 반복합니다. 카운터 " " "i네스트 루프 내에서는 외부 루프의 카운터가 숨겨지기 때문에 2개의 카운터가 서로 독립적으로 증가합니다.

바깥쪽부터i숨겨져 경우, 는, 「」의 할 수 .i루프가 네스트된 루프의 ,i외부 루프로 이동합니다.i을 줄 수을 피하기 위해 그러한 .다만, 이것은 독자에게 혼란을 줄 가능성이 높기 때문에, 「유지책임」을 피하기 위해서 그러한 코드의 작성을 피하는 것이 좋다.

주의: 양쪽 루프의 카운터 변수가 동일한 식별자를 가지고 있어도i는 2개의 독립변수로 남습니다.즉, 양쪽 루프에서 동일한 변수를 사용하지 않습니다.양쪽 루프에서 동일한 변수를 사용하는 것도 가능하지만 코드를 읽기 어려울 수 있습니다.다음은 예를 제시하겠습니다.

for (int i = 1 ; i < 100 ; i++) {
    for ( ; i % 10 != 0 ; i++) {
        printf("%02d ", i);
    }
    printf("%d\n", i);
}

이제 두 루프 모두 동일한 변수를 사용합니다.단, 컴파일(데모)하지 않고 이 코드가 무엇을 하는지 알아내는 데는 시간이 걸립니다.

넌넌할수있있있있 。 이 요.i. s를 .ii_1 내면의 ★★★★★★★★★★★★★.ii_2의 " " "is 음 음 음 음 같 니 다 니 다 다 s s s 。

for(int i = 0; i < 10; i++)
{
     // i means i_1
     for(int i = 0; i < 10; i++)
     {
        // i means i_2
     }
     // i means i_1
}

서로 영향을 주지 않고 정의 범위만 다르다는 점에 유의해야 합니다.

충분히 가능합니다만, 주의해 주세요.처음 선언한 i를 수신처로 지정할 수 없습니다.

for(int i = 0; i < 10; i++)//I MEAN THE ONE HERE
{

  for(int i = 0; i < 10; i++)
    {

    }
}

두 번째 자루프 내의 두 번째 루프에서

for(int i = 0; i < 10; i++)
{

  for(int i = 0; i < 10; i++)//the new i
    {
        // i cant see the i thats before this new i here
    }
}

첫 번째 i의 값을 조정하거나 얻으려면 두 번째 루프에 j를 사용합니다.

for(int i = 0; i < 10; i++)
{

  for(int j = 0; j < 10; j++)
    {

    }
}

그리고 당신이 충분히 창의적이면 당신은 두 가지 모두를 하나의 루프로 할 수 있습니다.

for(int i ,j= 0; i < 10; (j>9) ? (i++,j=0) : 0 ,j++)
{
    printf("%d %d\n",i,j);
}

코드/컴파일러의 관점에서는, 이것은 지극히 유효하고 합법적으로 행해지는 것입니다.int i에서 for(int i = 0; i < 10; i++)루프는 새롭고 작은 범위에 있기 때문에 선언은 선언을 그림자처럼 따라다닌다만,int i다음 중 하나:에 대한 .i에 가다int i스코프로 되어 「이너 스코프」는 있습니다.int i부부스스스스스손손손손않않상상상)

그러나 코드 품질의 관점에서 보면 이는 매우 끔찍한 일입니다.읽기 어렵고, 이해하기 어렵고, 오해하기 쉽다.하지 마세요.

, 같은 변수, 내측 에도 사용할 수 있습니다.forfor 루우프

부터 for 루프:

for ( init_clause ; cond_expression ; iteration_expression ) loop_statement
loop_statement로 사용되는 expression 문은 init_clause범위와는 다른 독자적인 블록 범위를 확립합니다.

for (int i = 0; ; ) {
    long i = 1;   // valid C, invalid C++
    // ...
}  

loop_statement의 범위는 init_clause의 범위 내에 중첩됩니다.

출처 C Standards #6.8.5p5 반복문 [강조사항]

반복문은 범위가 둘러싸인 블록의 범위의 엄밀한 부분 집합인 블록입니다.루프 본문은 반복문 범위의 엄밀한 서브셋인 블록이기도 합니다.

C Standards #6.2.1p4에서 식별자 범위 [강조 지뢰]

......내부 범위 내에서 식별자는 내부 범위에서 선언된 엔티티를 나타냅니다.외부 범위에서 선언된 엔티티는 내부 범위 내에서 숨겨져(표시되지 않음).

네, 쓸 수 있는데 좀 헷갈리네요.가장 중요한 것은 루프 내의 로컬 변수의 범위입니다.변수가 함수 내부에서 선언된 경우 해당 변수의 범위는 함수입니다.

int a = 5;
// scope of a that has value 5
int func(){
    int a = 10;
   // scope of a that has value 10
}
// scope of a that has value 5

마찬가지로 루프가 있는 경우 내부 루프 내에서 선언된 변수는 다른 범위를 가지며 변수에서 선언된 외부 루프는 다른 범위를 가집니다.

for(int i = 0; i < 10; i++){
    // In first iteration, value of i is 0

    for(int i = 1; i < 10; i++){
        // In first iteration, value of i is 1
    }
    // In first iteration, value of i is 0
}

내부 루프와 외부 루프에 다른 변수를 사용하는 것이 좋습니다.

for(int i = 0; i < 10; i++){

    for(int j = 1; j < 10; j++){

    }

}

네, 반드시 같은 이름 변수를 사용할 수 있습니다.

C 프로그래밍 변수는 다음 세 곳에서 선언할 수 있습니다.
로컬 변수:함수 또는 블럭 내부에 있습니다.
전역 변수: - 모든 함수에서 제외됩니다.
형형매매 : 수매매매변변 。

당신의 i scope에 안 된다

for(int i = 0; i < 10; i++)
{
     // i means 1st for loop variable
     for(int i = 0; i < 10; i++)
     {
        // but here i means 2nd for loop  variable
     }
     //interesting thing here i means 1st for loop variable
}

주의: 내부 루프와 외부 루프에는 다른 변수를 사용하는 것이 좋습니다.

예 - 더 흥미로운 것은 한 세트의 브레이스를 열 때마다 변수 이름을 재사용할 수 있다는 것입니다.이것은 진단 코드를 삽입할 때 편리합니다.열린 대괄호 '{' 뒤에 선언 및 변수 사용을 입력한 다음 대괄호를 닫으면 변수가 사라집니다.이렇게 하면 본체의 어떤 것도 간섭하지 않고 괄호 밖에서 선언된 변수, 클래스 및 메서드의 장점을 그대로 유지할 수 있습니다.

범위 규칙: for 문에 선언된 변수는 해당 문과 루프 본문에서만 사용할 수 있습니다.

코드 내에서 내부 루프에 i의 여러 인스턴스를 정의한 경우 각 인스턴스는 자체 메모리 공간을 차지합니다.그래서 결과는 어차피 똑같을 텐데 걱정할 것 없다.

int main(void) {

    int i = 2; //defined with file global scope outside of a function and will remain 2
    if(1)
    {       //new scope, variables created here with same name are different
        int i = 5;//will remain == 5
        for(int i = 0; i < 10; i++)
        {   //new scope for "i"

            printf("i value in first loop: %d \n", i); // Will print 0 in first iteration
            for(int i = 8; i < 15; i++) 
            {   //new scope again for "i", variable with same name is not the same
                printf("i value in nested loop: %d \n", i); // Will print 8 in first iteration
            }
        }

    }

    return 0;
}

단, 같은 변수 이름은 이해하기 어렵고 나중에 유지보수가 불가능한 코드가 되므로 사용하지 않는 것이 좋습니다.

에 '''가 포함되어 입니다.int i왜냐면i이렇게 정의하면 두 변수는 서로 영향을 주지 않고 범위가 다릅니다.이를 나타내는 두 가지 예를 다음에 제시하겠습니다.

for(int i = 0; i < 10; i++) // This code will print "Test" 100 times
{
 for(int i = 0; i < 10; i++)
 {
  puts("Test");
 }
}

에는 '아까보다'가 포함되어 있습니다.int i에는 " " " " "만 포함됩니다.i.

for(int i = 0; i < 10; i++) // This code will print "Test" 10 times
{
 for(i = 0; i < 10; i++)
 {
  puts("Test");
 }
}

스크립트에 문제가 없는 경우에도 이 작업은 수행할 수 있지만 이러한 구조는 피해야 합니다.그것은 보통 혼란으로 이어진다.

할 수 있어요., 첫 할 수 없기 때문에 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "i를 참조해 주세요.

 for(int i=0; i<queries.size();i++){


    for(int i=0; i<strings.size();i++){
        
        if(strings[i]==queries[i]){
       
        }
    }
 }

언급URL : https://stackoverflow.com/questions/51548994/can-a-for-loop-inside-of-a-for-loop-use-the-same-counter-variable-name