【 C 언어 】 #36 문자열 포인터 이해하기

Language/C & C++ 2018. 4. 23. 17:28 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #35 문자열 포인터 이해하기



 포인터 는 C언어에서 종종 중요하게 사용된다. 포인터를 이용하여 메모리로 직접 접근이 용의하고 하드웨어적인 부분을 직접 컨트롤 할 수 있기 때문이다.

다만 처음 개념 이해가 어려울 수 있으나 예제 내용을 바꾸어가며 테스트해 보면 비교적 쉽게 이해될 것이다. 

 앞선 글에서 정수형 변수를 가지고 포인터를 활용하는 법을 설명하였는데, 문자열도 문자열 포인터 변수로 선언하여 분신으로 사용 가능하다.  단, 이때는 분신연산자(&)를 붙이지 않고 선언한다. 예를 들면, "RasINO"를 'RINO'라는 문자열 포인터로  선언하게 되면, "RasINO"를 사용할 모든 곳에 RINO라고 사용할 수 있다.  또한 배열 포인터 형태로 사용하면 된다.


▶ 문제  : 문자열 "RasINO" 를 문자열 포인터 변수로 선언하고 출력하라.



▶ 포인트 


- 문자나 문자열은 puts();  함수를 이용하여 출력한다. 

- 문자열은 "  " 이중따움표로 표시한다.

- 문자열"RasINO"를 배열에 넣고 배열을 문자열 포인터로 지정한다



▶ 프로그램 : 




▶ 실행 결과 :


▶ 보충설명 :


string[0] 과 pstr[0]은 그 값이 같다

문자열 포인터 선언시에는 분신연산자 '&'를 사용하지 않음에 유의 한다. 

단, 배열의 특정 요소부터 출력시킬 때는 '&'를 사용해야 한다. 

(예, pstr2 = string; 

     puts (&psr2[1])   // 'sINO'  가 출력 됨)





+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


36 문자열 포인터 이해하기-코드.cpp





반응형

【 C 언어 】 #35 포인터 이해하기

Language/C & C++ 2018. 4. 23. 14:02 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #35 포인터 이해하기



 포인터 는 C언어에서 종종 중요하게 사용된다. 포인터를 이용하여 메모리로 직접 접근이 용의하고 하드웨어적인 부분을 직접 컨트롤 할 수 있기 때문이다.

다만 처음 개념 이해가 어려울 수 있으나 예제 내용을 바꾸어가며 테스트해 보면 비교적 쉽게 이해될 것이다. 

포인터 변수는 원변수의 분신의 역할을 하게 되고 원변수가 가지는 똑같은 값을 지닌다. 즉, 원변수의 값이 바뀌면 포인트 변수의 값이 똑 같은 값으로 바뀌며, 그 반대도 마찬 가지다. 


▶ 문제  : 변수 두 개를 선언후 각각의 포인터 변수를 선언하고 변수 내용을 바꾸면 포인터 변수의 내용도 바뀌는지 확인하는 프로그램을 작성하라.


▶ 포인트 


- mainA 변수에 포인터 변수 *ghost, mainB 변수에 포인터 변수 *pman 을 지정


- 포인터 변수 선언 :   int* ghost

- 지정 방법 :  변수명에 '&'를 붙이고 포인트 변수에 대입 ghost =&mainA 



▶ 프로그램 : 




▶ 실행 결과 :



▶ 보충설명 :


ghost = &manA; // manA의 분신으로 포인터 변수인 ghost를 지정 

*ghost = 1;       //분신 관계 이므로 *ghost에 입력한 1값이 manA에도 저장 됨

printf("manA = %d, *ghost=%d \n\n",manA, *ghost);  // 값 확인 

manA = 2; // manA에 2를 입력해도 분신 *ghost에 2가 저장됨 

printf("manA = %d, *ghost=%d \n\n",manA, *ghost);

pman = &manB; // manB의 분신으로 포인터 변수인 pman을 지정 

*pman = 3; // 분신인*pman에 3를 입력하면 manB에도 3이 저장됨 

printf("manB = %d, *pman=%d \n\n",manB, *pman);

pman = &manA; //manB의 분신으로 지정한 pman을 manA에 추가로 분신                      // 지정 하면 manB에는 분신이 없는(해제) 상태가 되고 

       // manA는 기존 분신 *ghost에 ,  *pman까지 새로 추가된다. 

*pman = 4;       // pman은 현재 manA의 분신이다. 

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);

manA = 5;      // manA의 분신으로 ghost, pman 두개가 지정 되어 있다. 

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);  

*ghost = 6;

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);

manB = 7;     // manB 값을 바꾸어도 분신해제된 pman값은 변하지 않는다  

printf("manA=%d, *pman=%d, *ghost=%d, manB=%d,  \n\n", manA, *pman, *ghost, manB);



[ 코드에 실행시 결과 값 표시 ]




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


35 포인터 이해하기.cpp


반응형

【 C 언어 】 #34 변수의 메모리 번지 이해하기

Language/C & C++ 2018. 4. 17. 10:44 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #34 변수의 메모리 번지(주소) 이해하기



 변수가 정의 될 때는 변수 값을 저장할 메모리 공간(정수형 변수는 4바이트)을 확보하고 그 주소를 지정(기억)하게 된다.  프로그래밍이 처리 되는 과정에서 데이터가 저장된 메모리의 번지를 이용해서 값을 불러오거나 처리할 수 있게 된다. 


▶ 문제  : 변수 i =0 와 j =1 를 선언하고 초기값 0과 1을 준다. 각 변수가 지정된 메모리 번지를 출력하라.


▶ 포인트 

  printf() 함수를 이용해서 메모리 번지를 출력 할 수 있으며, (정수형)값을 나타내는 %d 대신 %p 를 사용하며, 변수의 메모리 번지를 넘겨주기 위한 '번지 지정 연산자(&)'를 사용하면 번지를 출력할 수 있다. 



▶ 프로그램 : 




▶ 실행 결과 :



▶ 보충설명 :


j는 0062FE48~0062FE4B ,  4바이트의 메모리 공간으로 지정 되어 있으며 시작번지가 0062FE48 이다.  여기에 데이터 1의 값이 저장되어 있다.


i는 0062FE4C~0062FE4F ,  4바이트의 메모리 공간으로 지정 되어 있으며 시작번지가 0062FE4C 이다.  여기에 데이터 0의 값이 저장되어 있다.


아래 변수와 메모리와의 관계 도표를 보면 쉽게 이해가 갈 것이다.



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  



반응형
반응형

【 C 언어 】 #33 배열 이해하기 2 (국영수 성적 예제)



 앞 글에서 다룬 배열을 사용하면 여러 종류와 많은 데이터를 일괄적을 관리하기에 편하다.  


▶ 문제  : 국영수 3과목 각 10개의 점수 데이터를 배열로 저장하고 각 과목별 점수와 각 과목의 평균값을 출력하라. 

 

▶ 포인트 

  먼저 국영수 등 기본 값들을 출력하고, 각 값들의 평균값 계산 및 저장을 위한 변수를 선언한다. everageK(국어평균), everageE(영어평균)everageM(수학평균), 평균값 변수 선언 때 float 형과 같은 실수형을 선언해야 소숫점의 평균값을 다룰 수 있으며, 깔끔한 출력을 위해 소숫점 출력 자릿 수를 지정하면 좋다. (%.1f  : 소수 첫 째 자리까지만 표시) 지정하지 않을 경우 "87.500000" 과 같이 표시 됨


▶ 프로그램 : 




▶ 실행 결과 :



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  



반응형
반응형

【 C 언어 】 #28-조건-순환문(while continue break)-이해하기


 조건 순환문은 대개의 경우 for 문을 대신하여 사용되며, " while(조건식) {  } "형태로 사용된다.  이 조건문이 참인 동안 '{ 중괄호 내용 }' 을 계속 반복 실행하며, 중괄호 속에 if 문과 함께 continue;  break; 문을 사용하여 계속실행시키거나 빠져나올 수 있는 형태를 취할 수도 있다.


▶ 문제 1 : 1부터 10까지를 더하는 프로그램을 단순 while 문을 이용하여 작성 하시요.    int i;  int tot=0;

 

▶ 포인트 


 반복 조건으로 1 <= 10 까지만 반복하도록 한다.   증가 명령어로 i++; 을 사용


▶ 프로그램 : 





▶ 실행 결과 :





▶ 소스코드 다운로드 :  


28 조건 순환문(while continue break)이해하기.cpp


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


▶ 문제 2 : 정수값을 입력받아 해당 정수값까지 계속 더하는 프로그램을 작성하되, 어떤 숫자를 입력 받든 50까지만 제한 하도록 continue; 와 break; 문을 이용하여 작성하시오. 

 

▶ 포인트 


 ex) while 반복문 속에 if( ) continue;를 넣어 반복 조건을 만들고,  if( ) break; 문을 넣어 해당조건이 되면 반복문을 빠져나오도록 한다. 

조건문 속에 AND ( '&&' )  혹은  OR( '||' ) 넣어 두가지 조건을 동시에 물을 수 있음. (  ||  기호는  키보드의 '' 기호 위에 있는 기호를 shift 키를 눌러 두번 입력한 것임.  )


▶ 프로그램 : 




▶ 실행 결과 :


10을 입력 한 결과


100을 입력 한 결과



▶ 소스코드 다운로드 :  

28 조건 순환문(while continue break)이해하기-문제2.cpp


반응형

【 C 언어 】#27 조건 선택문( switch case) 이해하기

Language/C & C++ 2018. 4. 10. 11:46 Posted by 엑소더스팩토리
반응형

C 언어 #27 조건 선택문( switch case) 이해하기


 조건문인 if... else 구문과 유사하게 사용할 수 있는 switch case 구문을 연습해본다.  if 문의 경우에는 여러번 사용될 경우 프로그램 파악이 어렵거나 복잡하게 느껴질 수 있으나, switch case 문을 사용하면 프로그램이 직관적이고 간결해지는 장점이 있다. 


▶ 문제 : a=5, b=3, 을 정수로 선언하고 , scanf를 이용해서 1~3 사이의 값을 입력을 받는다. 

- 1번 선택시 a와 b를 더한 값을 출력하고, 

- 2번 선택시 a와 b의 뺄셈 값을 출력하고, 

- 3번 선택시 a와 b를 곱한 값을 출력하라

 그 이외의 값을 입력받으면 default: 구문을 사용하여 "1~3 사이의 값을 입력하라"는 메세지를 출력하라.

 

▶ 포인트 


case 1:   case2:    case3:   default:    형태로 하고 문장 끝에 세미 콜론이 아닌 콜론임에 주의 할 것.  default : 구문은 case1~3 이 외의 경우 값을 처리하는데 사용되며 생략 가능하다. 


▶ 프로그램 : 






▶ 실행 결과 :


( 3번을 입력한 경우 )


( 1~3번이 아닌 다른 값을 입력한 경우)





▶ 소스코드 다운로드 :  


27 조건 선택문(switch case)이해하기.cpp





반응형
반응형

  #26 중첩 순환문 이용하여 구구단 출력하기


  중첩 순환문을 이용하여 간단하게 구구단을 출력하는 코딩연습을 해본다. 

구구단을 위한 주요 알고리즘을 먼저 작성하고 단표시나 구분 등의 치장을 하는 순서로 작성하라.


▶ 문제 : 1단~9단 까지의 구구단을 완성하고 구구단 사이에 ------ 1 단 ------ ...  와 같은 구분기호를 넣어 작성하라.


▶ 포인트 바깥 쪽 순환문(i)은 1단~9단 까지의 앞자리를 나타내고 안쪽 순환문 (j)는 1~9까지의 두 번째 배수를 채워 주는 순환문의 역활을 한다.



▶ 프로그램 : 






▶ 실행 결과 :




▶ 소스코드 다운로드 :  


26 중첩 순환문 이해하기.cpp






반응형