'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를 .i
i_1
내면의 ★★★★★★★★★★★★★.i
i_2
의 " " "i
s 음 음 음 음 같 니 다 니 다 다 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
부부스스스스스손손손손않않상상상)
그러나 코드 품질의 관점에서 보면 이는 매우 끔찍한 일입니다.읽기 어렵고, 이해하기 어렵고, 오해하기 쉽다.하지 마세요.
, 같은 변수, 내측 에도 사용할 수 있습니다.for
for
루우프
부터 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
'programing' 카테고리의 다른 글
프로그램적으로 16진수 색상(또는 rgb 및 혼합 색상)을 밝게 또는 어둡게 합니다. (0) | 2022.09.26 |
---|---|
공장 패턴과 전략 패턴의 차이점은 무엇입니까? (0) | 2022.09.26 |
PHP의 opcode를 얻는 방법 (0) | 2022.09.26 |
도커 컨테이너에 mariaDB를 입력하는 방법 (0) | 2022.09.26 |
3가지 다른 점은 (0) | 2022.09.25 |