Search

【 C 언어 】 #37 NULL 널 문자 이해하기

Language/C & C++ 2018. 5. 3. 11:03 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #37 NULL 문자 이해하기



 문자열 길이를 구하는 문제를 통해 NULL 문자에 대해 이해 할 수 있다.  


▶ 문제  : 문자열 길이(예, abcdefg: 길이 7) 를 구하는 코드를 작성하라. 



▶ 포인트 


- 문자열의 끝은 항상 NULL('\0')문자 로 종료된다.

NULL 문자는 아스키 코드 값  '0' 이다

- 문자열 길이를 구하는 함수를 따로 작성하여 코딩한다.

- 문자형 포인터 변수(*pstr)를 사용하여 코딩한다.

- *pstr 은 pstr이 가리키는 번지에 저장되어 있는 값을 의미한다. 



▶ 프로그램 : 


# 이미지를 클릭하면 확대 되어 선명하게 보실 수 있습니다.


▶ 실행 결과 :


▶ 보충설명 :


- *pstr 은 pstr이 가리키는 번지에 저장되어 있는 값을 의미한다.  따라서 pstr은 번지(주소) 라는 것을 이해 해야 한다.

- pstr은 문자열의 선두 번지를 가리키고 있기 때문에, pstr의 번지가 1씩 증가(pstr++)함에  따라 *pstr의 값은 첫 번째 값 a 부터...  b, c, d, e, f, g, \0  처럼 된다.

- while문에서 NULL문자('\0') 의 아스키 값은 '0' 이기 때문에 문자열 끝을 알리는 NULL 문자를 만나면 while 문을 빠져 나오게 된다.

- pstr++;   은 pstr의 번지를 1만큼 증가 시킨다(pstr은 포인터 변수 이기 때문)

- len++;   은 문자열 길이 값을 1만큼 증가 시킨다


 문자열 'abcdefg' 가 메모리에 저장된 모습을 그림으로 그려 보면 아래와 같다.

문자열의 첫 번째 a가 저장된 번지를 '1000'번지라고 가정 해 보자.


# 이미지를 클릭하면 확대 되어 선명하게 보실 수 있습니다.


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



▶ 소스코드 다운로드 :  


37 NULL 넌 문자 이해하기-코드.cpp






반응형

【 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


반응형