코드블럭으로 C배우는 잼민이 입니다.
int A;
char A{10};
scanf("%d", &A);
scanf("%s", A);
라고 하면 왜 문자열 저장하는 데에는 &<===게 안 들어가는 지 모르겠습니다. 구글로 찾아봤는데
제가 이해한 사항으로는
&
이 표시는 주소를 나타내는 것으로 &A라고 하면 A 이름으로 저장된(또는 저장될) 데이터의 주소를 나타내는 것이다.문자열 입력받을 때 쓰지 않는 이유는 배열의 이름 자체가 주소를 나타내기 때문이다.
아....그렇다면 말이죠, 굳이 문자열만 저렇게 이름 자체가 주소를 나타내도록 하지 말고, 그냥 정수값이던 실수값이던 번거롭게 &빼먹어서 오류 나게 하지말고 문자열같이 이름 자체가 주소를 나타내도록 하면 않되나요?
문자열은 되고, 왜 정수형이나 실수형은 안되는 건지 모르겠네요. 심지여 숫자배열도 입력받으려면 &게 들어가야 하더군요...
(IP보기클릭)118.235.***.***
(IP보기클릭)59.16.***.***
에...혼자 배우는 거라. 무거운건 육체만으로 충분해서T..T 가벼운 IDE를 찾다보니 VS말고 이걸 쓰게 되었습니다. | 21.12.16 20:01 | |
(IP보기클릭)119.65.***.***
(IP보기클릭)59.16.***.***
아...그렇군요...감사합니다... | 21.12.16 19:48 | |
(IP보기클릭)116.121.***.***
(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.***.***
(IP보기클릭)59.16.***.***
...예전에 VB 6.0 배울때는 '와, 혼자서 하는데 막 창이 뜨고 계산기도 만들고, 그림판도 만들수 있네?! 프로그레밍 개꿀! 나 좀 천재인듯' 했었습니다. 데니스 리치가 아직 살아있었으면 F-word 메일을 보냈을 텐데... 답변 감사드립니다. | 21.12.16 19:57 | |
(IP보기클릭)221.163.***.***
(IP보기클릭)59.16.***.***
그냥 문법이 거지같은 걸로 생각하겠습니다. 제가 멍청한게 아닙니다. | 21.12.16 19:58 | |
(IP보기클릭)70.54.***.***
(IP보기클릭)59.16.***.***
다시 봐야 하다니T..T 답변 감사드립니다. | 21.12.16 19:58 | |
(IP보기클릭)70.54.***.***
극단적으로 말하면 포인터 역할이 동적 메모리 사용을 위한거라... | 21.12.16 20:04 | |
(IP보기클릭)175.200.***.***
(IP보기클릭)59.16.***.***
| 21.12.16 20:30 | |
(IP보기클릭)210.117.***.***
(IP보기클릭)59.16.***.***
감사합니다. | 21.12.16 20:31 | |
(IP보기클릭)124.49.***.***