728x90

 

2014.03.25 수업 ver1_0a.docx

2014. 03. 26 수업 및 과제 


1 배열

1.1 배열 프로그램 시 주의 할 점

    [예제]

#include <stdio.h>
int main()
{
  int arr1[3]; //
배열은 3 선언 
  arr[0]=1, arr[1]=2, arr[2]=3, arr[3]=4; //
실제 값은 4개가 입력
  return 0;
}

배열 프로그램 시 주의 사항)

컴파일 시 경고나 오류 메시지가 없음

실제 값은 4개가 입력되어 다른 메모리 영역을 침범 -> 치명적 오류 문제 발생

 

1.2 배열의 선언 및 초기화

[예제]

#include <stdio.h>

int main()
{
  int arr1[5]={1,2,3,4,5};
  int arr2[ ]={1,2,3,4,5,6,7};
  int arr3[5]={1,2};
  int ar1Len;
  int ar2Len;
  int ar3Len;
  int iCnt;

  printf("배열 arr1 크기:%d \n"sizeof(arr1)); //int 4byte x 5 =20 
  printf("
배열 arr2 크기:%d \n"sizeof(arr2)); //int 4byte x 7 =28
  printf("
배열 arr3 크기:%d \n"sizeof(arr3)); //int 4byte x 5 =20

  ar1Len = sizeof(arr1) / sizeof(int); //
배열 arr1 길이 계산
  ar2Len = sizeof(arr2) / sizeof(int); //
배열 arr2 길이 계산
  ar3Len = sizeof(arr3) / sizeof(int); //
배열 arr3 길이 계산
  
  for(iCnt=0; ar1Len>iCnt; ++iCnt)
    printf("%d ", arr1[iCnt]);
  printf("\n");

  for(iCnt=0; ar2Len>iCnt; ++iCnt)
    printf("%d ", arr2[iCnt]);
  printf("\n");  
  
  for(iCnt=0; ar3Len>iCnt; ++iCnt)
    printf("%d ", arr3[iCnt]);
  printf("\n");

  return 0;
}

[결과]  

  1.3 문자배열의 초기화

- printf(“%c \n”, str);

- “ABCD” 문자열을 초기화 하면 맨 끝에 null 값을 넣는다.

- %c 한 문자만 출력

- str &(주소)를 의미 한다.

 

[예제]

#include <stdio.h>

int
 main()
{
  
char
 str[]="Good morning!";
  printf(
"배열 str의 크기: %d \n"sizeof
(str) );
  printf(
"널 문자 문자형 출력: %c \n", str[13
] );
  printf(
"널 문자 정수형 출력: %d \n", str[13
] );

  str[
12]='?'// 배열 str에 저장된 문자열 데이터는 변경 가능!

  str[4]=0// 0 null이 들어 간다 
  
  printf(
"문자열 출력: %s \n", str); //null(0) 이 나올때 까지 출력

  printf("문자열 출력: %s \n", str); 
  printf(
"문자열 출력: %s \n"&str[5]); //&[5]번째 부터 null이 올때까지 출력 

  printf("문자열 출력2: %c \n", str[5]); //[5]번째 속한 %c한문자 출력 
  printf("%08X \n"&str);
  printf(
"%08X \n"&str[0
]); 
  
return
 0;
}

  [결과] 

 

1.4 배열을 이용한 문자열 변수의 표현

str.

0

1

2

3

4

5

6

7

8

9

10

11

12

13

G

o

o

d

 

m

o

r

n

i

n

g

!

null

 

 

type

Name

address

char

char *

char *

str

cp1

cp2

12FFAA

12FFBB

12FFCC

 

 

 

  

Ø  c언어: “문자열끝에 null값이 들어감

Ø  어셈블리: “문자열끝에 null값이 들어가지 않음

Ø  문자열: null 포함된 문자배열.

Ø  배열을 포인터처럼 있다.[예제2]

Ø  포인터를 배열처럼 있다. [예제2]

 

Ø  str 포인터로 있다.(값이 변하는 포인터)

Ø  cost 포인터와  같다.

Ø  )char * const cp3=str;  

      

 

[예제1]

#include <stdio.h>

int main()
{
  char str[]="Good morning!";
  char *cp1;
  char *cp2;
  cp1=str; //cp1: str
 주소상수를 담는 포인터(주소변수 

  printf("%c \n", *cp1);   //cp1
 가리키는 주소의  문자 출력 
  printf("%s \n", cp1);   //
포인터 변수
  printf("%s \n", str);   //
주소 상수
/*
  ++cp1;          
  printf("%s \n", cp1);   //
변수 
  printf("%s \n", str);   //
배열 str 자체가 주소 상수
*/

  printf("----------------\n"); 
  cp1=cp1+5;
  printf("%s \n", cp1);    
  printf("%s \n", str+5); 
  
  printf("----------------\n"); 
  cp2=str;
  printf("%c \n", str[0]);    
  printf("%c \n", cp2);    
  
  printf("----------------\n"); 
  printf("%c \n", *(str+1));    
  printf("%c \n", *(cp2+1));    
  printf("%c \n", cp2[1]);    
  printf("%c \n", str[1]);    

  return 0;
}
  

 

[예제2]

#include <stdio.h>

int main()
{
  char str[]="%d %d\n";
  char * cp1=str; 
  printf("%d %d\n"100,50);   //1 printf(   , ...);” ”
주소 상수
  printf(cp1, 100,50);         //2 printf(cp, ...);cp
주소 상수
  printf(str, 100,50);        //3 printf(str, ...);str
주소 상수
  return 0;                     //1,2,3
모두 같은 결과값 출력
}

 

 

 

- ABCD” 문자열을 초기화 하면 맨 끝에 null 값을 넣는다.

- %c 한 문자만 출력

- str &(주소)를 의미 한다.

 

.

'…™업무일지。' 카테고리의 다른 글

[smart]이재우-20140327  (0) 2014.03.27
[smart]이재우-20140326  (0) 2014.03.26
[smart]이재우-20140324  (1) 2014.03.24
[smart]이재우-20140321  (0) 2014.03.21
[smart]이재우-20140320  (0) 2014.03.20