Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
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
Tags
more
Archives
Today
Total
관리 메뉴

초보자의 개발 일지

[C] -포인터와 함수, 각 변수의 이해- 본문

Programming/C

[C] -포인터와 함수, 각 변수의 이해-

초보자12 2022. 11. 19. 23:06

  - 이전에 배운 내용 -

●  변수와 연산자

 

●  기본 자료형

 

  while, do~while문

 

●  switch문 , goto문

 

 

 

 - 오늘 배운 내용  -

 

●  포인터와 함수의 활용

 

●  for 반복문

 

●  구조체와 배열

 

각각의 변수관련 이해와 특징

 

● 함수의 사용과 소스파일 , 헤더파일 관련 프로그래밍 방법

 

 

1.-포인터와 함수의 활용-

 

프로그래밍은 큰 틀에서는 컴퓨터가

을 전달 하느냐 , 주소값을 전달 하느냐로 나뉘는 게 포인트이다.

 

값을 전달해 주는 방법과 주솟값을 전달해 주는 방법을 알아야 하는데, 

강사님께서 swap 함수를 통해서 가르쳐주셨다.

temp 변수 활용으로 a와 b의 값이 변해야 하지만, 주소값을 전달해주는 것이아닌, 값을 전달해주었기 때문에 출력 되는 값은 그대로 나온다.

주소값을 전달해 줘야 값이 바뀌지만, 값만 전달하는 call by value 방식을 사용했기 때문이다.

그렇다면 원하는 대로 Swap 함수를 실행시키려면 주소값을 전달해 줘야 한다. 

다음과 같다.

여기서는, a와 b의 값을 바꿔주기 위해서 포인터 함수를 활용하였다.

값을 전달하는 방식이 아닌, 주소값을 전달해 주는 call by address 방식을 사용했다.

내가 이해 한 방식은 

main 함수에서 PSwap이라는 함수를 호출하였다. 인자 값은 &a와 &b로 각각 

위에 Pswap의 매개변수  pa와 pb로  &a와 &b가 전달된다.  *pa는 pa 변수가 가지고 있는 값의 포인터를 말하는 것이니,

pa 변수에 저장된 주소값에 해당하는 데이터로 pa의 주소인 값을 불러들인다.

정리하자면,

 

*pa는 pa 변수가 가진 주소값을 불러들이는 것. (포인터 연산자)

&a는 a의 주소값을 얻어내는 것. (주소 연산자)

pa 변수가 가진 주소값은 &a로 a의 주소값을 말하고, a의 주소값은 a 값 그 자체의 위치를 알 수 있다.

 

pa 변수는 &a로 전달되었으므로,  즉 a의 주소값을 의미하고 그것을 넣어준다. 그러면 변수 a 값 그 자체를 의미하게 된다.

그러면 temp 변수에는 a의 주소값이 전달이 되고 b도 마찬가지로 진행이 되면,  temp 변수 활용으로 a와 b의 값이 바뀌게 된다.

실행을 해보니 정말 값이 바뀌게 출력이 되었다.  그 밖의 call by reference라는 방식도 있다고 했는데,  오늘 배우진 못했다.

 

2. -전역변수, 정적변수,로컬변수 의 이해-

자바를 공부하면서 c언어를 공부하다 보니 비슷한 부분도 많지만 다른 부분도 상당히 많은 것 같다.

 

정적 변수라든지, 자바 필드의 개념과 유사한 전역변수, 그리고 블록 안에서 만들어 그 범위 안에서만 접근이 가능한 로컬 변수가 있었다.

 

전역 변수를 선언한 모습
GetScore이라는 함수를 사용하여 정적변수 생성
메인함수에서 함수호출하여 정적변수의 특징 실습

위에 static으로 int형 sum이라는 변수를 만들고, 매개변수 value 값을 sum에 계속 더해 반환하였다.

그리고  메인 함수에서 GetScore이라는 함수를 호출하고 실행을 하면,  for 반복문을 이용하여 매개변수값에 

i가 0부터 10까지 증가한 값을 sum에 누적시킨다. 그러면 45가 되어서 출력이 되는데,

만약 정적 변수를 활용하지 않고 그대로 int로 지정하면 블록 안에서만 동작하는 로컬 변수로 값이 누적되지 않는다.

 

포인터처럼 주소값 지정 말고도, 이런 변수 설정 부분도 자바 언어랑 비교했을 때 다른 점이 많다고 생각했다.

 

3.- 헤더 파일과 소스 파일 관련 사용법-

 

짧게나마 헤더 파일을 활용하는 법을 오늘 배웠는데 자바 언어랑 비슷하긴 한데 선언 부가 다른 점이 있어서 인상 깊었다.

그래도 메인 함수는 하나에서 실행하고, 여러 개의 헤더 파일을 생성하여 실행시키는 틀은 비슷 한 것 같았다.

헤더파일을 가져오는 선언을 해준 모습

헤더 파일에서 PrintGlobal() { } 을 만들고 이 안에 로직을 짠 뒤, 메인 함수에서 호출을 하여 실행시키는 방식인 것 같다.

강사님께서 다음에 가르쳐주실 내용이라고 해서 급하게 넘어갔는데 나중에 자세히 다룰 내용인 것 같다.