검색결과 리스트
글
Ⅰ. Call-by-value
- 함수를 호출 할 때 단순히 값을 전달하는 형태의 함수호출
< 예제 >
#include <stdio.h>
void change(int n1, int n2){
int temp= n1;
n1=n2;
n2=temp;
printf("(After) Number 1 : %d, Number 2 : %d \n",n1,n2);
}
int main(void){
int num1=10;
int num2=20;
printf("(Before) Number 1 : %d, Number 2 : %d \n",num1,num2);
change(num1,num2);
//printf("Number 1 : %d, Number 2 : %d \n",num1,num2);
-> 사용시 num1과 num2가 바뀌지 않는다 (위에 함수를 int형으로 바꾼뒤 return n1,n2;)
return 0;
}
< 출력결과 >
(Before) Number 1 : 10, Number 2 : 20
(After) Number 1 : 20, Number 2 : 10
Ⅱ.Call-by-reference
- 메모리의 접근에 사용되는 주소 값을 전달하는 형태의 함수 호출
< 예문 >
#include <stdio.h>
void change(int *ptr1, int *ptr2){
int temp = *ptr1;;
*ptr1 = *ptr2;
*ptr2 = temp;
}
int main(void){
int num1=10;
int num2=20;
printf("Number 1 : %d, Number 2 : %d \n",num1,num2);
change(&num1,&num2);
printf("Number 1 : %d, Number 2 : %d \n",num1,num2);
return 0;
}
< 출력 결과 >
Number 1 : 10, Number 2 : 20
Number 1 : 20, Number 2 : 10
sourced by "윤성우 열혈 C 프로그래밍 강의"
'Programming > C' 카테고리의 다른 글
구조체 ( Struct ) (0) | 2015.08.27 |
---|---|
Stack과 Queue (0) | 2015.08.26 |
2차원 배열 (0) | 2015.08.26 |
동적 할당 (0) | 2015.08.26 |
[ Project ] Pascal (0) | 2015.08.26 |
설정
트랙백
댓글
글
2차원 배열
- 2차원 배열은 1차원 배열과는 다르게 첨자 2 개를 사용하는 배열이다. 같은 데이터형의 변수가
행( row )과 열( column )을 나타내는 데 , 첫 번째 첨자는 행을, 두 번째 첨자는 열을 나타낸다.
Ⅰ. 행과 열
1차원 배열에서는 변수이름 [ 열 ]로 표현했지만 , 2차원 배열에선 변수 이름 [행] [열] 로 표현한다. 옆에 그림과 같이 표현한다.
Ⅱ. 2차원 배열의 크기
변수이름 [i:n][j:m] 의 크기는 i와 j 가 첫 번째 요소의 행과 열의 첨자이고, n과 m은 마지막 요소의 행과 열의 첨자이다.
따라서, 배열의 크기를 구하는 공식은 ( n-i+1) x ( m-j+1) 이다.
(ex) 위의 그림 처럼 첫 번째 요소의 행과 열은 [0][0]이므로 i 와 j 는 0이고, 마지막 요소의 행과 열은 [2][1]이므로 n은 2,
m은 1이다. 따라서 위의 그림의 배열의 크기는 (2-0+1) x (1-0+1) 으므로 3x2는 6이되어,
위 그림의 2차원 배열의 크기는 6이다.
Ⅲ. 2차원 배열의 저장 방식
2배원 배열에는 행 중심 저장 방식과 열 중심 저장 방식이 있다. 행 중심 저장 방식은 1번째 행,
2번째 행 .. 순으로 저장하고 열 중심 저장 방식은 마찬가지로 1번째 열, 2번째 열.. 식으로 저장 한다.
☞ 2차원 배열 arr[n][m]에서 첫 번째 요소의 행과 열의 첨자가 a이고 시작주소가 base, 요소의 크기가 size라고 할 때 ,
arr[i][j]의 주소를 구하는 공식은 다음 과 같다
① 행 중심 저장 방식
arr[i][j] 의 주소 = base + (m x (j-a)) x size
② 열 중심 저장 방식
arr[i][j] 의 주소 = base + (n x (j-a)) x size
(ex) 위의 사진을 예로 들면 시작 주소는 200이고 각 요소의 크기는 4이니.. ▼
① 행 중심 저장 방식의 arr[2][0]
200 + (2 x (2-0) + (0-0)) x 4 = 216
② 열 중심 저장 방식의 arr[2][0]
200 + (3 x (0-0) + (2-0)) x 4 = 208
두 결과 모두 원하는 결과를 출력하고 있다.
sourced by "NAVER"
'Programming > C' 카테고리의 다른 글
Stack과 Queue (0) | 2015.08.26 |
---|---|
Call-by-value 와 Call-by-reference (0) | 2015.08.26 |
동적 할당 (0) | 2015.08.26 |
[ Project ] Pascal (0) | 2015.08.26 |
포인터 ( Pointer ) (0) | 2015.06.14 |
설정
트랙백
댓글
글
- 컴파일을 실행하기 전에 메모리의 크기가 정해져 할당되어 있는 정적 할당과 달리 프로그램 실행 중에
Ex) 1 ~ 100을 입력하는 배열에서는 크기를 100으로 줘야 하는데 그럼 20을 입력하면 80이 쓸데없게 된다.
1. malloc 함수
- Memory Allocation의 약어로 "메모리 할당" 이라는 뜻이다. 메모리의 크기를 설정 하기 위해 사용 한다.
형식 : 포인터 변수명 = (자료형 *) malloc ( sizeof( 자료형 ))
2. calloc 함수
- Clear Allocation의 약어로 "깔끔한 할당" 이라는 뜻이다. 메모리의 크기를 초기화 한 뒤 메모리의
형식 : 포인터 변수명 = (자료형 *) calloc ( 메모리에 곱할 수, sizeof( 자료형 ))
3. realloc 함수
- Re Allocation의 약자로 "재할당"이라는 뜻이다. 동적 메모리 할당을 해제하지 않고 다시 설정하여
형식 : 포인터 변수명 = (자료형 *) realloc ( 재설정할 변수 명 , sizeof( 자료형 ))
II. 동적 할당을 끝낼 땐..
- 동적 할당을 끝내고 싶을 땐 free (포인터 변수)를 입력하면 된다.
'Programming > C' 카테고리의 다른 글
Stack과 Queue (0) | 2015.08.26 |
---|---|
Call-by-value 와 Call-by-reference (0) | 2015.08.26 |
2차원 배열 (0) | 2015.08.26 |
[ Project ] Pascal (0) | 2015.08.26 |
포인터 ( Pointer ) (0) | 2015.06.14 |
RECENT COMMENT