본문 바로가기
코스웨어/14년 스마트컨트롤러

2014년 03월 25일 손병규[출석번호 14]

by 알 수 없는 사용자 2014. 3. 25.
728x90
반응형

1차원 배열의 접근

 

int arr[3]; //길이가 3인 int형 1차원 배열

 arr[0] = 10;

 arr[1] = 12;

 arr[2] = 25;

 

배열의 모든 요소는 반복문을 이용해서 순차적으로 접근하는 것이 편리하다

 )

 for(iCnt=0; 3>iCnt; ++iCnt)

 {

     arr[iCnt]=iCnt;

 }  




* 참고


int main(void)

{

    int arr[3];

    int[0]=1, arr[1]=2, arr[2]=3, arr[3]=4;

}

 

배열 arr의 길이가 3이고 현재 4번째 요소에 접근을 하였다따라서 이것이 문제가 된다그런데 컴파일러는 배열접근에 있어서 유효성 검사를 진행하지 않기 때문에 위의 경우에도 컴파일 에러를 일으키지 않는다. 따라서 더 주의를 기울러야 한다.

위의 같이 문제를 일으킬 경우 할당하지 않은 메모리 공간을 침범하게 되는데상활에 따라서 반응을 다르게 할 수도 있고경우에 따라서는 문제가 발견되지 않을 수도 있기 때문에 배열을 사용할 때 항상 주의해서 사용되어야 한다.

 




배열 선언과 동시에 초기화

 

 int Arr1[5] = {1, 2, 3, 4, 5}; //순차적으로 1, 2, 3, 4, 5로 초기화 함

{ } -> 초기화 리스트

 

▶ int Arr2[ ] = {1, 2, 3, 4, 5, 6, 7}; //컴파일러에 의해 자동으로 [ ] 에 7이 삽입됨

초기화 리스트가 선언되면배열의 길이 정보를 생략할 수 있다.

 

 int Arr3[5] = {1, 2}; //3, 4, 5번째 배열요소는 0으로 채워짐

배열의 길이를 다 채울 만큼의 초기 값이 선언되지 않은 경우 초기값 선언부분을 제외한 나머지 부분을 0으로 채워진다.





char형 배열의 문자열 저장과 (null)'문자

 -> 큰 따옴표를 이용해서 문자열을 표현


)

char str[ ] = "Good morning!";

 

위의 배열 길이를 출력해 보면 14가 나온다눈으로 확인을 해보면 길이가 13가 나와야 하지만 배열 문자열 끝에는 ‘\0'(null)이라는 특수문자가 자동으로 삽입되어서 배열 길이가 14가 나온 것이다.

문자열 배열을 선언할 경우 특수문자‘\0'이 저장될 공간까지 고려해서 배열의 길이를 결정해야 한다.

 


널 문자의 아스키 코드 값은 0이며문자 형태로 출력할 경우아무런 출력이 발생하지 않으며 널 문자와 공백 문자를 혼동할 수 있기 때문에 주의를 해야 한다.

위의 코드처럼 공백 문자의 아스키 코드값은 32, null 아스키 코드 값은 0 이므로

공백문자와 null은 엄연히 다른 것이다.

 

* 문자열 마지막에 왜 '\n'값이 자동으로 들어가는 이유는 배열에 대입된 문자열의 끝이라는 것을 표시 하기 위해서 '\n'값을 자동으로 사용된다.


실습

ArrayString.c



기타


실습

main2.c


-> str[ ];

※ (배열 == 주소) -> (str == 숫자)          * str은 변수가 아님

※ str의 주소 == str[0]의 주소

str=12; // l-value 에러

즉 str은 심볼(주소)이다


%s -> 문자열로 저장되어 있는 주소를 출력  ==  char *  ==  문자열 배열 

↘ 포인터 *를 배열로 배열을 포인터 * 로 두 가지 중에 하나를 사용하면 된다.


실습 main2.c 코드

printf("%c\n",str[1]); //배열 str[1]의 값 출력

printf("%c\n",cp2[1]); //포인터 cp2를 배열을 사용하여 값 출력

printf("%c\n",*(str+1)); //배열 str[1]을 포인터를 사용하여 값 출력

printf("%c\n",*(cp2+1)); //포인터 cp2+1 주소가 가리키고 있는 값 출력


-> 출력값이 전부 똑같이 나오는 걸 확인 할 수 있다.





실습

main3.c


printf("%d\n");    -> ("    ")  : 문자열 

 printf(문자열이 들어 있는 주소, ); 




실습

main4.c


(배열 == 포인터 *) 두가지 중 하나를 사용하면 된다고 하였지만 문자열의 길이(용량)와 사용방법에 따라 메모리를 효율적으로 사용할 수 있다.

* 문자열을 수정해서 사용 해야 할 경우는 포인터

* 문자열을 수정하지 않고 사용할 경우  문자열 배열





문제 11-1 [1차원 배열의 활용]

< 공부하는데 도움되었으면 좋겠네여 ^^! > 이상 있을시에 댓글 해주세요


문제1

test1.c

문제2

test2.c

 

도전 ! 프로그래밍

http://index2014.tistory.com/entry/%EB%8F%84%EC%A0%84%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D1

 

728x90