*캡쳐 화면은 gsit postech에서 제공하는 윤은영 교수님의 컴퓨터 공학 입문(https://pabi.smartlearn.kr/courses/course-v1:POSTECH+DSC104+P903/about) 강의 내용임을 밝힙니다.
배열이란?
-배열의 필요성: 동일한 자료형의 데이터가 여러 개 필요한 경우 변수를 하나씩 선언하여 사용할 수 있지만, 성적 처리와 같이 많은 자료를 처리해야 할 때는 하나씩 선언하는 것보다 여러 개를 한번에 선언하고 각각의 데이터에 접근하여 처리할 수 있는 방법이 필요.
-배열: 동일한 자료형의 데이터가 여러 개 연속적으로 저장되어 있는 데이터 저장 장소.
int score [5];
자료형 배열이름 배열크기
(1) 초기화
int score [5] = {1,2,3,4,5};
(2) 배열의 크기 없이 초기화: 자동적으로 초기값의 원소 개수 만큼 배열 크기로 생성
int score [ ] = {1,2,3,4,5} ;
(3) 일부만 초기화 -> 나머지 원소들은 0으로 초기화
int score [5] = {90, 80};
(4) 0ㅇ으로 초기화
int score [5] ={0} ;
변수 선언과 메모리
*python의 리스트 기능과 비슷하군
-배열명, 주소 상수: 데이터가 접근하기 위한 도구이다. 배열의 이름 a자체가 주소이므로, &가 없어도 주소를 의미하게 된다.
-a+1 -> a[0]의 다음 번지인 a[1]번지 주소가 됨! (주소연산을 사용할 수 있으며, 주소 연산을 하면 다음 바이트가 아닌 다음 칸의 주소가 호출된다)
배열 선언과 메모리
1) 주소상수 a는 변경할 수 없음!
a=a+1 // 에러뜸
2) 원소명(ex. a[0] )은 변수처럼 처리할 수 있다.
a == &a[0]
a+1 == &a[1]
a[2] = 70 ;
배열 원소명 바꾸고자 하는 값
*(a+2) = 70 ;
(배열과 포인터 더 찾아보기)
배열과 함수
xysum: 각각의 배열에 대해 첨자가 동일한 변수의 합으로 구성된 배열을 만들고 싶다.
함수를 사용할 때, call by value? call by address?
value 로 부를 경우, 총 15개의 방이 필요하고, c언어에서는 리턴값을 1개만 받을 수 있으므로 리턴할 때도 문제가 된다!
==> call by address를 이용함.
배열의 이름이 넘어온다면, 로컬 함수에서도 배열의 이름으로 받아주거나, 주소이므로 포인터 변수로 받아줘야 한다.
주소를 가리키게 하면( int a[] ), 원본 배열 x의 원소에 대해 a[0]이 원소의 별명처럼 적용되며 받아올 수 있다!
이렇게 될 경우 리턴이나 역참조 연산자를 사용하지 않더라도 메인 함수의 값을 바꿀 수 있다.
<실수>
printf("\n y 배열 원소 출력: ");
for (i=0; i<5; ++i)
{
printf("3d%", y[i]);
}
// y 배열 원소 출력: 3d3d3d3d3d
이렇게 뜸... %는 출력되지 않고 3d가 5번 출력됨..(% 출력하고 싶을 경우, %%를 사용한다)
'오늘의 코딩 > C언어' 카테고리의 다른 글
배열과 구조체 (0) | 2019.08.25 |
---|---|
파일 입출력과 함수 (0) | 2019.08.22 |