배열과 포인터
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
해당 자료는 10페이지 까지만 미리보기를 제공합니다.
10페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

배열과 포인터에 대한 보고서 자료입니다.

목차

- 포인터와 배열 -
1.메모리의 주소
2.포인터의 개념
1) 주소연산자
2) 포인터연산자
- 프로그램 소스 및 실행결과 -
3.배열
1) 1차원배열
2) 2차원배열
3) 3차원배열
4) 배열의 초기화
- 프로그램 소스 및 실행결과 -

본문내용

이터 개를 입력 : ", n);
scanf( "%lf", &data[n] );
//scanf( "%lf", data + n );
sum += data[n];
}
free( data );
avg = sum / n;
printf("데이터의 수 = %d, 평균 = %f\n", num, avg);
}
2) 실행결과
데이터의 수를 입력 : 3
0번째 데이터 개를 입력 : 5.0
1번째 데이터 개를 입력 : 1.0
2번째 데이터 개를 입력 : 12.8
데이터의 수 = 3, 평균 = 6.266667
3) 프로그램 분석
(1) int num, n;
num은 데이터의 수를 저장하기 위한 변수이다.
(2) double *data, sum = 0.0, avg;
data에 동적 메모리를 할당하기 위해서는 *data와 같이 포인터로 선언한다.
(3) scanf( "%d", &num );
데이터 수 num을 입력 받는다.
(4) data = (double *)malloc( num * sizeof( double));
함수 malloc()을 이용하여 배열 data에 데이터의 수만큼 메모리를 할당한다. 배열 data가 double형이고, 데이터 수가 num이기 때문에, 함수 malloc()의 인수 num * sizeof( double )은 할당할 메모리의 바이트 수를 나타낸다. sizeof( double )는 double형의 바이트 수 8을 반환한다. 즉, sizeof( 자료형 )은 자료형의 바이트 수를 반환한다. 함수 malloc()는 메모리 할당을 성공적으로 하는 경우는 할당된 메모리의 시작주소를 반환한다. 실패한 경우는 NULL을 반환한다.
(5) // data = (double *)calloc( num, sizeof( double));
함수 calloc()을 이용하여 배열 data에 데이터의 수만큼 메모리를 할당한다. 즉, data = (double *)malloc( num * sizeof( double));와 같은 역할을 한다. malloc()은 인수가 num * sizeof( double )로 1개이지만, calloc()은 인수 num과 sizeof( double )로 2개이라는 것에 주의를 요한다. 또한, malloc()은 배열 data를 초기화하지 않지만, calloc()을 0으로 초기화한다는 점도 다르다.
(5) scanf( "%lf", &data[n] );
배열 data의 n번째 요소에 값을 입력받는다. data[n]은 배열 data의 n번째 요소를 나타낸다.
(6) //scanf( "%lf", data + n );
scanf( "%lf", &data[n] );와 같은 의미로 사용한다. &data[n]을 포인터 형식 data + n로 나타낸 것이다.
(7) free( data );
data의 메모리를 해제한다. 해제된 메모리 공간은 다른 메모리의 할당을 사용될 수 있다.
(8) 실행결과
3개의 데이터에 대한 메모리를 할당하고, 데이터를 입력받아 배열 data에 대입한 후에, 데이터의 평균을 구한 것이다. 이와 같이 데이터의 수에 따라 필요한 만큼 메모리를 동적으로 할당할 수가 있어, 메모리를 효율적으로 활용할 수 가 있다.
예제 6-14 그림 6-11과 같이 각행의 요소 수가 다른 2차원 배열의 메모리를 할당하고, 배열에 값을 대입한다.
2
3
4
6
8
6
9
12
15
그림 6-11 각 행의 요소 수가 다른 2차원 배열
1) 프로그램 소스
#include
#include
void main(void)
{
int row, col;
double **data, sum = 0.0;
data = (double **)malloc( 3 * sizeof( double));
for( row = 0; row < 3; row++ )
*(data + row)= (double *)malloc((row + 2) * sizeof( double));
for( row = 0; row < 3; row++ ){
for( col = 0; col < row + 2; col++ ){
data[row][col] = (row +1)* (col + 2);
printf("data[%d][%d] = %-6.1f", row, col, data[row][col]);
sum += data[row][col];
}
printf("\n");
}
free( data );
printf("데이터의 합 = %f\n", sum);
}
2) 실행결과
data[0][0] = 2.0 data[0][1] = 3.0
data[1][0] = 4.0 data[1][1] = 6.0 data[1][2] = 8.0
data[2][0] = 6.0 data[2][1] = 9.0 data[2][2] = 12.0 data[2][3] = 15.0
데이터의 합 = 65.000000
3) 프로그램의 분석
(1) double **data, sum = 0.0;
2차원 배열 data를 2중 포인터 **data로 선언한다.
(2) data = (double **)malloc( 3 * sizeof( double));
행의 크기에 대한 메모리를 할당한다. data가 2중 포인터이므로 (double **)에 주의한다.
3개의 행에 대한 메모리를 할당한 것이다.
(3) *(data + row)= (double *)malloc((row + 2) * sizeof( double));
각 행에 대한 요소 수만큼 메모리를 할당한다. 즉, 0번째 행은 요소 수가 2개, 1번째 행은 요소 수가 3개, 2번째 행은 요소 수가 4개의 메모리를 할당한다. 이 예제에서 요소 수가 1개씩 늘어나고 있는 것은 프로그램을 간단히 하기 위한 것으로, 각 행의 요소 수는 필요에 따라 할당할 수가 있다. 또한, 행의 크기에 대한 메모리를 할당한 후, 각 행의 요소에 대한 메모리를 할당해야 한다.
(4) data[row][col] = (row +1)* (col + 2);
배열 data의 각 요소에 값을 대입한다. 여기에서는 배열의 표현을 사용하고 있으나, 포인터의 표현을 사용해도 된다.
(5) free( data );
배열 data에 대한 메모리를 해제한다.

키워드

  • 가격1,200
  • 페이지수33페이지
  • 등록일2005.12.16
  • 저작시기2005.12
  • 파일형식한글(hwp)
  • 자료번호#327571
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니