본문 바로가기

오늘의 코딩/C언어

배열과 함수

*캡쳐 화면은 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 ;

(배열과 포인터 더 찾아보기)

 

 

 

 

 

배열예제_1.cpp
0.00MB

배열과 함수

 

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번 출력됨..(% 출력하고 싶을 경우, %%를 사용한다)

배열_함수_예제_1.cpp
0.00MB

 

 

 

'오늘의 코딩 > C언어' 카테고리의 다른 글

배열과 구조체  (0) 2019.08.25
파일 입출력과 함수  (0) 2019.08.22