typedef struct _pet
{
char name[10];
char* address;
..
..
......
}PET;
void main()
{
PET jindo;
//이제 구조체를 초기화 해봅시다
jindo.name="duru"; // 1번
jindo.address="Seoul"; // 2번
..
..
.....
//구조체의 멤버와 영역이 다른 변수들
char name[10]="두루2"; //3번
char* address="서울2"; //4번
}
컴파일이 과연 될까요?
에러가 나는데 그 이유는 무엇일까요?
에러는 1번에서만 발생합니다...
구조체에서는 문자형 배열은 초기화할때
1. strcpy(name,"duru");
2. jindo={"duru","Seoul", ... , ... ,};
이런 식으로 해야되지요
구조체뿐만 아니라 변수역시
char name[10]="두루2";는 가능하지만
char name[10]; name="두루2"는 불가능합니다
반면 포인터로 선언할때는
char* address="서울2";과
char* address; address="서울2"; 둘다 가능하지요
배열의 이름이 혼자 쓰일때 포인터와 같은 기능을 하지만 초기화에서는
차이가 나는군요...
그래서 구조체에서는 배열보다는 포인터로 선언하는게 좋겟네요
윈도우 프로그래밍에서
WNDCLASS winclass;
..
..
winclass.lpszClassName="test";
winclass.lpfnWndProc="WndProc";
..
..
문제 없이 컴파일되는것을 보아 포인터형으로 선언된거라고 유추할수있겠군요(lp...에서 알수있지만);
배열과 포인터에서 차이가 나는 이유는 무엇일까요?각자 생각을 리플로 좀 ^^ 달아주심 감사
메모리상에 "test"란 글자를 올리고 그 주소를 char*형 변수에 넣는 겁니다.
char[] 형은 주소가 고정되어 버리기 때문에. (대략 const로 생각하심 되죠)
주소를 바꿀 수 없기 때문에 상수형 문자열을 넣어버리면 에러가 납니다.
예전에 한 삽질의 결론이죠 -_-