Haekt‘s log

포인터 변수와 %p주소 형식 지정자 with 배열 본문

언어/C

포인터 변수와 %p주소 형식 지정자 with 배열

Haekt 2022. 9. 20. 15:23

보기 전에 알아야 할 것 !


먼저 포인터를 사용하기 위한 기호들을 알아보자. 

 

포인터를 사용하기위해 쓰는 기호는 두가지가 존재한다. 

 

*  & 이다.

먼저 

 

*   

위의 기호는 애스터리스크라고 하며,

포인터 변수를 선언할 때 포인터 변수를 사용할 때 쓴다.

 

위의 기호는 앤퍼샌드 라고 하며 , 변수의 주소를 활용해야 할 때 사용한다.

 

 

** 자료형을 잘 이해하고 있다면 이해하기 조금 더 쉬울 수 있다. 

 

 


자료형의 종류 :  https://jostch.tistory.com/160

 

C 언어) 자료형의 종류

자료형이란? 모든 자료들의 형식을 정하는 것. 자세히 말하자면 자료형은 메모리에서 어떤 종류의 데이터인지 알려주는 일종의 장치이다. 보기전에 알아야 할 것! 컴퓨터의 부호 표현 방법 사람

jostch.tistory.com

 


 

 

포인터 변수는 변수 앞에 * 을 붙여서 선언하게 되며

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] , ….이 생기는 것이라고 생각하면 된다.

 

 

 

틀리다고 생각하는 점은 말씀 해 주시면 감사하겠습니다~

 

Comments