구조체에 관한 간단한 질문.
글쓴이: kevin0960 / 작성시간: 일, 2008/09/28 - 10:38오후
다음은 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 언어 초짜가 이렇게 질문 드립니다.
Forums:


두 코드가 의미가 다른데요.
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; 변경하시거나 하는게 좋을 것 같습니다.
댓글 달기