구조체에 관한 간단한 질문.

kevin0960의 이미지

다음은 test 라는 구조체를 만들어서, 그 구조체의 배열의 c 값을 모두 1 로 초기화하는 것 입니다.

#include
struct test
{
int c;

};
test x[50];
int ptr(test *k , int j);
int main()
{
int i = 0;
while(i < 50){
ptr(&x[i],i);
i++;
}
return 0;
}
int ptr(test *k , int j)
{
k[j].c = 1;
return 0;
}

위 처럼 하면 x[1].c , x[3].c , x[5].c 등 홀수 번째 값들이 모두 1 이 되지 않습니다.

그런데

#include

struct test
{
int c;

};
test x[50];
int ptr(test *k , int j);
int main()
{
int i = 0;
while(i < 50){
x[i].c = 1;
i++;
}
return 0;
}

이렇게 하면 모두 정상적으로 1 이 됩니다. 도대체 왜 그런 것이죠? 어제 밤새서 생각해 보았는데도 잘 모르겠네요.
C 언어 초짜가 이렇게 질문 드립니다.

mg2000의 이미지

main함수의 while문 내부를 보시면,

while (i < 50) {
    ptr(&x[i], i)
    i++
}

이렇게 되어있는데, 이미 x의 i번째 항목을 넘겨주고 있습니다.

그런데 ptr을 봅시다.

int ptr(test *k, int j)
{
    k[j].c = 1;
}

이미 i번째 항목을 넘겼는데, 거기서 다시 j번째 항목에 값을 할당하고 있습니다.

당근 차례대로 할당이 안되겠죠?

제가 보기에는 while문 내부를 ptr(x, i)로 수정하거나,

아니면, ptr(&x[i])로 바꾸고, ptr내부를 k->c = 1; 변경하시거나 하는게 좋을 것 같습니다.