포인터 주소값이 null?
이해가 어려운 섹션이나 영상 설명은 질문으로 꼭 남겨주세요.- P의주소값이 null인데
- P가 a(art)랑 같다는게
- 이해가 안가네요.
- 주소값이 없어도 값은 가질수있다는 뜻인가요?
답변 1
0
p = a;
이 부분이 빈 값(null)에서 a를 가리키라고 엎어친 것입니다.
코드를 순서대로 이해하실 수 있게 현실에 비유해보겠습니다.
null은 그냥 없다고 생각하신다고 하면,
포인터 변수(p)를 손가락이라고 생각해봅시다.
저는 지금 제 손가락을 가위모양으로 만들었습니다. 무언가를 가리키려고 합니다. (char *p) - 포인터 변수 탄생만 시켰다는 뜻. 정확히 말하면 방금 만든 손가락은 "char" 형태의 데이터만 가리킬 수 있게 만든 것임.
근데 일단 허공을 가리키고 싶습니다. ( = NULL)
안 가리켜도 되지 않냐고요? (그냥 char *p;만 선언) 네, 그래도 됩니다.
그런데 허공을 가리켜도 되죠. 개발자가 코드를 작성하는 마음대로 할 수 있습니다.
저기에 문자열 a가 탄생해있습니다. (char a[] = "Art";)
허공을 가리키고 있는 손가락으로 a를 가리키라고 명령합니다. ( p = a );
→ (여기서 질문)
Q. 왜 a의 주소를 넘겨줘야하는데 &a라고 안하고 그냥 a로 주나요?
A. C언어에서는 배열과 문자열은 이름 그 자체가 주소처럼 행동합니다. 이건 C언어의 문법 스펙이라 강제로 암기가 필요한 부분.
(결론) 자, 이제부터 제 손가락은 a의 첫부분을 가리키고 있습니다.
이해에 도움이 되셨을까요?
(미니퀴즈1) p의 값을 출력하면 뭘까?
#include <stdio.h>
int main() {
char a[] = "Art";
char* p = a;
printf("%c\n", *p); // A
return 0;
}(*p) 정답은 %c로 출력했다는 가정에서 'A'. 포인터는 배열 맨 앞의 주소를 가리키고 있음
(미니퀴즈2) a의 값을 출력하면 어떻게 될까? %c와 %s일 때 다름.
#include <stdio.h>
int main() {
char a[] = "Art";
printf("%c\n", *a); // A
return 0;
}위의 경우는 배열의 주소(배열 이름은 곧 주소처럼 취급가능)의 값이니 첫 글자인 A만 출력
#include <stdio.h>
int main() {
char a[] = "Art";
printf("%s\n", a); // Art
return 0;
}(출력문에 들어가는 변수값에 * 별 없음 주의. 없어야 제대로 실행됨)
이 경우에는 메모리 주소를 주면서 %s로 출력하라고 해서 "Art" 전체가 출력.
(미니퀴즈3) A만 출력하는 3가지 방법을 얘기해라.
*a, *p, a[0]
문자열도 배열로 선언하기 때문에 배열처럼 인덱스로 접근하여 출력할 수 있습니다. (단, %c 형태로 출력 필요)
이것은 그냥 받아들이고 외우는 것이 좋습니다.
감사합니다.
필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)
0
51
2
26년 1회 실기 해설 강의
0
68
2
53번 4-1 자료 오류 있는 것 같습니다.
0
73
2
7번문제
0
60
2
C언어 변형문제 9번문제 Pdf 수정요청
0
48
2
메서드 오버드라드
0
51
2
실수
0
46
1
공부 우선순위 우선강의 알려주세요
0
90
1
생성자 호출순서 강의 10번 문제 30분대 질문입니다
0
49
2
25년 2회 기출 5:40 질문입니다.
0
43
2
모의고사1회 3번 파이썬문제
0
75
2
C언어 출제변형 6번 문제
0
50
2
c언어 출제변형 강의 질문
0
32
2
28:40
0
34
2
C : 언어 배열과 문자열 수업자료
0
31
2
파이썬 리스트, 딕셔너리 질문
0
43
2
모의고사 관련 질문 건
1
69
3
자료 내용 오류
0
64
2
정적 변수, 정적 메서드(static) v2
0
51
2
v1.2 와 v0.91 PDF
0
104
1
업캐스팅 (부모형태, 자식생성자)
0
51
2
정보처리산업기사 준비중입니다.
0
74
2
실기 D -6
0
105
2
(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다
0
60
3





