포인터 배열과 구조체의 이용에서의 문제점... (해결 부탁)
보람
질문 제목 :
포인터 배열을 활용한 시언어서의 구조체의 활용에서의 궁금증
포인터 배열과 구조체 사이에서 실해이 안된 다는 거지는 알겟지만 확실 한 이유를 모른다.
질문 내용 :
일단 c++, c언어를 1년 정도 비베와 함께 배운 사람입니다.
일단, 저의 질문을 잘 이해시키기 위해 하나의 예제를 올리겠습니다.
예제1)
**생략**
int arr[4] = {1, 2, 3, 4};
int *p;
int i;
p = arr;
for(i = 0; i 4; i++)
{
printf(%d, *(p + i));
}
**생략**
이렇게 실행하게 되면 포인트 배열의 특직상 싫행이 되고 콘솔에는 1, 2, 3, 4가 나오게 됩니다. 하지만 밑에 있는것이 제가 잘 모르는 부분입니다.
#includestdio.h
void main()
{
struct sinsang
{
int hackbun;
char name[15];
int age;
char hobby[30];
};
struct sinsang sin[3] = {{17, 강승윤, 16, 컴퓨터}, {21, 김미진, 16, 놀기}, {12, 윤아영, 16, 잠자기}};
struct sinsang *sin_chart;
sin_chart = sin;
int i = 0;
for(i = 0; i 3; i++)
{
printf(학번 : %d\n, *(sin_chart + i));
printf(이름 : %s\n, *(sin_chart + i));
printf(나이 : %d\n, *(sin_chart + i));
printf(취미 : %s\n, *(sin_chart + i));
}
}
이렇게 되면 제가 원하는 방식대로 콘솔에 나오지가 않고 컴파일을 하게 되면 에러가 나오게 됩니다. 그래서 제가 포인터의 개념을 잘 생각해보았습니다. 일정한 메모리 안에 넣은 다음에 실행 시키는 것이기에 안나오는 것같기도 합니다만. 하여튼 실행이 안된다는 건 확실한데 정확한 이유를 잘 모르겠습니다. 정확한 이유 답변 해 주 실 수 있는 분 부탁드립니다. 그리고 더 이상한 점은 printf(학번 : %d\n, *(sin_chart + i));
printf(이름 : %s\n, *(sin_chart + i));
printf(나이 : %d\n, *(sin_chart + i));
printf(취미 : %s\n, *(sin_chart + i));
에서만 에러가 나왔다는 점입니다. 제가 영어를 해석 해 보았는데 다른데서 에러가 나오는 이유는 여기때문에 그런 거였습니다. 그래서 이러한 이유도 정확하게 부탁드리고여 고칠 수 있는 방법 부탁드립니다.
-
찬
*(sin_chart + i) 이것은 sin[0](i = 0 이라고 할경우) 와 같습니다. sin_chart는 아시다시피 구조체의 포인터이고 이 포인터로 하여금 i 만큼 이동한다는 뜻이 되는거죠 고로 *만 없다면 &sin_chart[i] 이거와 같게 되는거죠
배열의 주소가 되는거죠. 거기에 *을 붙였으니 값이 되는거죠. 고로 안의 내용들을 출력하기 위해서는
(*(sin_chat + i)).hackbun
(*(sin_chart + i)).name
(*(s -
콩알녀
윗분 말씀대로인듯 하신데
서적에서 구조체부분을 다시 한번 보시길 바랍니다.
구조체는 관련있는 변수끼리 하나로 묶어 만든 사용자 정의의 타입이잖아용
구조체 변수를 선언하시고 그 참조 하시고 싶으신 구조체의 멤버변수를 사용하실때는
구조체변수.멤버변수 이렇게 .으로 참조하시면되고요
원하시는건 구조체형 포인터니까
*(구조체형포인터변수+i).멤버변수 하시면 되겠네요 *(구조체변수+i) 를 ( )로 한번 더 감싸야하는지는 까묵어서;
다른표현방법은
구조체형 포인터일 -
큰꽃들
음....
먼저 가장 궁금한건 질문하시는 분은
printf(\이름 : %s\\n\
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |
2675356 | 2진수를 10진수로 바꾸려고 하는데 막히네요.. | 풀잎 | 2024-11-17 |
2675297 | Prity 비트 발생기 | 한란 | 2024-11-16 |
2675249 | C책 좀 추천해 주세요 (2) | 딸기우유 | 2024-11-16 |