일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- bastion host
- Python
- 온프레미스
- Repository
- AI
- 라우터
- Firewall
- Screening Router
- 머신러닝 프로세스
- 인공지능
- vlan
- vector
- 자바
- 리버싱
- Reversing
- STP
- 머신러닝
- 암호학
- 네트워크
- AWS
- dreamhack
- Mac
- 스위치
- CISCO
- 크롤러
- docker
- abex'crackme
- RIP
- cmd
- Java
- Today
- Total
Haekt‘s log
포인터 변수와 %p주소 형식 지정자 with 배열 본문
보기 전에 알아야 할 것 !
먼저 포인터를 사용하기 위한 기호들을 알아보자.
포인터를 사용하기위해 쓰는 기호는 두가지가 존재한다.
* 와 & 이다.
먼저 *
*
위의 기호는 애스터리스크라고 하며,
포인터 변수를 선언할 때와 포인터 변수를 사용할 때 쓴다.
&
위의 기호는 앤퍼샌드 라고 하며 , 변수의 주소를 활용해야 할 때 사용한다.
** 자료형을 잘 이해하고 있다면 이해하기 조금 더 쉬울 수 있다.
자료형의 종류 : https://jostch.tistory.com/160
포인터 변수는 변수 앞에 * 을 붙여서 선언하게 되며
printf( “%d “, *A ) 로 A 가 포인팅 하는 것의 내용을 출력하는 것이 가능하다.
아래의 설명은 코드를 보면서 이해하자.
결과값-
일반적인 변수처럼 x=1 이런식으로 값을 초기화 하거나, 넣어주는 것은 항상 *A=&b 로 특정 변수의 주솟값으로만 초기화가 가능하다.
만약 *A 는 표지판 같은 역할로, 선언을 하게 되면 A 라는 이름의 방향표지판을 꽂는다는 느낌으로 알아두면 된다.
!! A라는 주소가 담긴 표지판이 생성 되는 것이므로, A를 가르키는 것은 아니다.
// 이 부분은 내가 제일 헷갈렸던 부분이다.
*A=&B 와 같은 코드는 처음 생성한 A는 값이 없으므로 A가 가르키는 방향을 B로 재지정 해 주는 것이다.
A 표지판이 가르키는 *방향은 B 주소로 가는 방향이야~
그래서 만약 *A를 출력한다고 했을 때, *A에 적힌 주소인 B 의 주소를 찾아가서 출력하게 된다.
결론적으로 , B의 값이 출력된다.
포인터 배열 char * 변수명[]
배열 0 , 1 , 2 … 에 각각의 주소를 포인팅해주는 배열 포인터는
B[0] 이라는 배열이 변수와 똑같은 역할을 하듯
*A 포인터 변수와 똑같이
*B[0] , *B[1] , ….이 생기는 것이라고 생각하면 된다.
B[0] 로 가는 방향 , B[1] 로 가는 방향
정리-
A= 주소가 적혀있는 표지판.
*A= A에 적혀있는 주소로 가라.
A에 들은 값 : B의 주솟값
- A는 처음부터 포인터 변수로 선언을 했으니 형식은 %p 를 써야한다.
- *A는 A의 주소로 가라는 뜻이므로 해당 주소의 자료형 즉, B의 자료형에 맞춰 쓰면된다.
- 포인터 배열도 *A 포인터 변수와 똑같이 *B[0] , *B[1] , ….이 생기는 것이라고 생각하면 된다.
틀리다고 생각하는 점은 말씀 해 주시면 감사하겠습니다~
'언어 > C' 카테고리의 다른 글
[codeup] c언어 기초 100제/ 1010~1017, 1051~1052, 1063~1064, 1068~1070번 (0) | 2022.09.20 |
---|---|
C 언어 unsigned 와 signed 의 차이 (1) | 2022.09.20 |