본문

[잡담] C언어 문자열과 정수변수 입력방식 차이 [19]




(315557)
작성일 프로필 열기/닫기
추천 | 조회 931 | 댓글수 19
글쓰기
|

댓글 | 19
1
 댓글


(IP보기클릭)118.235.***.***

코드블럭이 뭐지...요세는 그런걸로 코딩하는가...;;
21.12.16 19:13

(IP보기클릭)59.16.***.***

흥어왕!!파르티잔
에...혼자 배우는 거라. 무거운건 육체만으로 충분해서T..T 가벼운 IDE를 찾다보니 VS말고 이걸 쓰게 되었습니다. | 21.12.16 20:01 | |

(IP보기클릭)119.65.***.***

뭔가 예제부터 엄청어렵게 적으셨네요. int A; char B[10]; 이런식으로 변수명좀 다르게해주세요. 우선 정확힌 문자든 실수든 배열로하면 배열이름자체가 주소입니다. 문자만 주소가 되는게 아니에요. int A[10]; char B[10]; printf("A : %d, \n B : %d", A, B); 요렇게 출력해보시면 둘다 각변수의 주소값이 나옵니다
21.12.16 19:17

(IP보기클릭)59.16.***.***

에스페란스
아...그렇군요...감사합니다... | 21.12.16 19:48 | |

(IP보기클릭)116.121.***.***

드디어 포인터의 세계로 오셨군요. 환영합니다. "문자열 입력받을 때 쓰지 않는 이유는 배열의 이름 자체가 주소를 나타내기 때문이다." <- 맞습니다. 이 이유 때문입니다. "아....그렇다면 말이죠, 굳이 문자열만 저렇게 이름 자체가 주소를 나타내도록 하지 말고, 그냥 정수값이던 실수값이던 번거롭게 &빼먹어서 오류 나게 하지말고 문자열같이 이름 자체가 주소를 나타내도록 하면 않되나요?" <- 가능합니다. 이미 이걸 위해 정의된 문법이 있습니다. 예를 들어 int형 변수를 선언하실 때. int A라고 선언하면 A의 값은 "값"이지만 int* A와 같이 *을 넣어서 선언하면 A의 값은 이제 주소를 나타냅니다.
21.12.16 19:19

(IP보기클릭)116.121.***.***

오잇스
값이 아닌 메모리 주소를 참조하는 변수를 "포인터 변수"라고 부릅니다. 일반 변수로는 int A; scanf("%d", &A); printf("%d", A); 위와 같이 작성됩니다. A는 "값"을 의미하고 scanf 함수는 입력받은 값을 메모리상 "어디에" 적어야 하는지를 받기 때문에 변수 A에 값을 저장하고 싶으면 &A로 A의 주소를 주는 것이지요. 만약 포인터 변수를 쓴다면 같은 구조를 아래와 같이 써야 합니다. int* A = malloc(sizeof(int)); scanf("%d", A); printf("%d", *A); 한 줄씩 설명 드리겠습니다. int* A <- A라는 이름의 포인터 변수를 생성하라는 뜻입니다. A는 값이 아닌 메모리 상 주소를 가리키며 이 메모리 주소에는 int형의 크기만큼 공간이 할당되어 있을 거라는 뜻입니다. int* A = malloc(sizeof(int)); <- malloc 함수는 메모리 상에서 주어진 용량만큼 메모리를 잡아서 그 "주소"를 반환합니다. sizeof(int)는 int형의 크기가 몇인지 반환합니다. 따라서 이 구문은 메모리 상에서 int 형 크기만큼 공간을 잡아서 그 주소를 A라는 포인터 변수에 저장한다는 의미입니다. scanf("%d", A); <- 아시 듯이 콘솔에서 정수형으로 입력받아 A가 저장하고 있는 메모리 주소에 쓰라는 얘기입니다. printf("%d", *A); <- A앞에 붙은 *은 A가 저장하고 있는 메모리 주소가 아닌 그 주소에 저장된 "값"으로 읽겠다는 의미입니다. | 21.12.16 19:26 | |

(IP보기클릭)59.16.***.***

오잇스
그러고보니...교제 다음장에 Chapter 09 '배열과 포인터' 라고 나오는데 ....-..- 질문만 보고 어찌 아신거지 ... 권해주신 교제는 잘 보겠습니다. 아직 오질 않아서-..- | 21.12.16 19:55 | |

(IP보기클릭)125.133.***.***

지금은 문법이 그렇구나 하고 넘어가시는 것이 좋습니다. 변수의 값과 주소에 대한 개념에 대한 것은 '포인터' 챕터에서 상세하게 다룰 것입니다. 포인터는 C를 공부하는데 가장 큰 고비중의 하나이며, 포인터를 이해하고 능숙하게 다룰 줄 알아야 C를 할 줄 안다고 할 수 있습니다. 포인터는 C가 메모리 주소에 접근하는 방법이며, C#, JAVA 같은 언어와 달리 로우레벨 엑세스가 가능해 지도록 해줍니다.
21.12.16 19:22

(IP보기클릭)59.16.***.***

잉그람
...예전에 VB 6.0 배울때는 '와, 혼자서 하는데 막 창이 뜨고 계산기도 만들고, 그림판도 만들수 있네?! 프로그레밍 개꿀! 나 좀 천재인듯' 했었습니다. 데니스 리치가 아직 살아있었으면 F-word 메일을 보냈을 텐데... 답변 감사드립니다. | 21.12.16 19:57 | |

(IP보기클릭)221.163.***.***

정확히 이해하려면 메모리 할당까지 가야 어느정도 이해가 될 수도 있는데, 아직은 그냥 문법이 거지 같구나 하고 넘기세영 ㅎㅎ
21.12.16 19:28

(IP보기클릭)59.16.***.***

루리웹-3649315747
그냥 문법이 거지같은 걸로 생각하겠습니다. 제가 멍청한게 아닙니다. | 21.12.16 19:58 | |

(IP보기클릭)70.54.***.***

정적 메모리 단계에서는 이해하기 힘든 부분입니다. 그냥 이런 문법 이구나 하신 다음에 동적 메모리 할당을 시작 하시면서 다시 한번 보시면 이해가 편하실 겁니다.
21.12.16 19:38

(IP보기클릭)59.16.***.***

분쇄쿠키
다시 봐야 하다니T..T 답변 감사드립니다. | 21.12.16 19:58 | |

(IP보기클릭)70.54.***.***

인민배우 심영
극단적으로 말하면 포인터 역할이 동적 메모리 사용을 위한거라... | 21.12.16 20:04 | |

(IP보기클릭)175.200.***.***

포인터 개념은 처음에 워낙 잡기 어렵다보니... 힘내세요
21.12.16 20:16

(IP보기클릭)59.16.***.***

에레쨩

| 21.12.16 20:30 | |

(IP보기클릭)210.117.***.***

vs code가 가벼운ide입니다..이클립스보다도 오류없고 가볍고괜찮습니다
21.12.16 20:27

(IP보기클릭)59.16.***.***

루리웹-6113790665
감사합니다. | 21.12.16 20:31 | |

(IP보기클릭)124.49.***.***

Implicit conversion임. Char array인 A는 컴파일러가 암시적으로 &A[0]으로 바꿔서 넣어 줍니다.
22.01.04 23:27


1
 댓글





읽을거리
[PS5] 국산 게임의 별로서 기억될 칼, 스텔라 블레이드 (128)
[MULTI] 탐험으로 가득한 사막과 맛있는 메카 전투, 샌드랜드 (33)
[MULTI] 아쉬움 남긴 과거에 보내는 마침표, 백영웅전 리뷰 (47)
[MULTI] 고전 명작 호러의 아쉬운 귀환, 얼론 인 더 다크 리메이크 (23)
[게임툰] 자신만의 용을 찾는 여행, 드래곤즈 도그마 2 (50)
[게임툰] 공주의 변신은 무죄, 프린세스 피치 Showtime! (34)
[NS] 창세기전: 회색의 잔영, 기념사업의 끝 (157)
[MULTI] 개발 편의적 발상이 모든 것을 쥐고 비틀고 흔든다, 별이되어라2 (88)
[NS] 여아들을 위한 감성 영웅담, 프린세스 피치 Showtime! (49)
[게임툰] 해방군은 왜 여자 뿐이냐? 유니콘 오버로드 (126)
[MULTI] 진정한 코옵으로 돌아온 형제, 브라더스: 두 아들의 이야기 RE (12)
[MULTI] 모험의 과정이 각별한 경험으로 맺어질 때, 드래곤즈 도그마 2 (52)



글쓰기
공지
스킨
글쓰기 69개의 글이 있습니다.
1 2 3
게시판 매니저
X