C++프로그래밍

2013.04.11_문자열을다루는배열,포인터배열

성엽이 2013. 4. 11. 17:04

■ volatile : 휘발성

 

 1.

  변수 선언 앞에 붙이면 컴파일 과정에서 컴파일러가 함부로 최적화하지말고 코딩된 원래 의도대로 하라는 의미 

 2.

  캐시 쓰지마라(캐시쓰지말고 장치나 메모리에 계속 값을 쓰고 가지고 오라는 의미

 

 ARM에서 주소값 캐스팅 할때... 

ex)       (Volatile unsigned int *)0xFFFFF400

 

 

 

 

※ MCU(Micro Controller unit) : 특정시스템을 제어하기 위한 전용 프로세서로 ROM과 RAM을 내장하고 있음

 

 

 

 

 문자열을 다루는 2차원 배열

 

#include <stdio.h>
#include <string.h>

int main()
{
     int i;
     char student[5][20];//2차원 배열을 선언하여 문자열을 편하게 다룰수 있음

     for(i = 0; i < 5; ++i)
     {
          printf("Please enter student name: ");
          gets(student[i]);//gets()함수는 입력된 글자가 20바이트(선언된 크기)를 넘으면 오버되어 다음줄 배열로

                               // 넘어간다 그리고 그 다음줄에 NULL을 만든다 그러므로 puts()로 찍어보면 널을만날때까지
                              // 출력되므로 2번째줄 배열까지 출력된다.
     }
     for(i = 0; i < 5; ++i)
     {
          puts(student[i]);
     }
  
   return 0;
}

 

 

 

 

 문자열을 가리키는 포인터의 배열

#include <stdio.h>
#include <string.h>

#define MAXSTD 10
#define NAMELEN 15

int main()
{
     char student[MAXSTD][NAMELEN];
     char *stptr[MAXSTD];
     char *temp;
     int i;
     int j;
     int count;
     count = 0;

     printf("Please enter name of student \n");

    while(count < MAXSTD)
     {
           printf("student %d : ", count + 1 );
           gets(student[count]);
           stptr[count++] = student[count];// 배열 1줄의 주소를 포인터 배열에 넣음
     }

     for (i = 0; i < count-1; ++i )
     {
          for (j = i+1; j < count; ++j)
          {
              if(strcmp (stptr[i], stptr[j]) > 0// 배열의 알파벳 순서를 비교하여

             {                                             //배열의 내용을 스와핑하는 것이 아니라
                  temp = stptr[j];                     // 포인터배열의 주소만 스와핑하여 용량적인 면에서 장점을 가짐
                  stptr[j] = stptr[i];
                  stptr[i] =temp;
              }
         }

     }

     printf("\nstudent List : \n");

     for (i = 0; i < count; ++i )
     {
           printf("student %d: %s\n", i+1, stptr[i]);
     }

     return 0;

}

 

 

 

 Main 함수의 인자

#include <stdio.h>

int main(int iNum, char *command[])
{
     int iCnt;
                                      //main 함수 인자로 int형 정수를 넘겨받으면
     printf("%d\n", iNum); //실행파일을 실행시킬때 띄어쓰기로 구분하여
                           
//단어(실행파일이름을 포함)가 몇개 적혔는지 갯수를 넘겨줌 

     for(iCnt = 0; iCnt < iNum; ++iCnt)
     {                                                   //main 함수 인자로 char *형 주소값을 넘겨받으면....

          printf("%s\n", command[iCnt]); //실행파일을 실행시킬때 띄어쓰기로 구분하여
                                                         // 여러단어를 적으면 각각의 단어(실행파일이름을 포함)는 
                                                         //메모리로 올라가고  그 각각의 메모리 주소가 포인터배열에 저장된다.
     }                                                  // %s로 각각의 주소를 출력해보면 어떤 단어를 입력했는지 알수 있다.
                                                 // 마지막 단어 다음 배열의 주소에는 NULL이 들어가있음.
  
     return 0;
}

    

 

 

 



----------

8_10.c


8_11.c


8_12.c


8_13.c


8_14.c


test.c

----------