목록C (65)
개인노트
1차원 배열을 함수의 인자로 전달하는 방법은 다음과 같았다. int * arr; or int arr[]; 2차원 배열을 함수의 인자로 전달하는 방법은 다음과 같다. int (*arr)[3]; or int arr[][3]; 2차원 배열을 함수의 인자로 전달하기 예제.c#include #include "stdlib.h" void ShowArr2DStyle(int(*arr)[4], int column) {int i, j;for (i = 0; i < column; i++) {for (j = 0; j < 4; j++) {printf("%d", arr[i][j]);}printf("\n");}}int Sum2DArr(int arr[][4], int column) {int i, j, sum = 0;for (i = 0;..
int main(void) {int num1 = 10, num2 = 20, num3 = 30, num4 = 40, num5 = 50;int arr[2][4] = { 1,2,3,4,5 }; int *ptr1[5] = { &num1,&num2,&num3,&num4,&num5 }; // 포인터 배열int (*ptr2)[4] = arr; //배열 포인터 system("pause");} 포인터 배열과 배열 포인터의 차이점을 알고 넘어가자. 포인터 배열은 포인터의 기능인 주소값을 저장하지만 그 대상이 여러개일 때 유용하며, 배열의 형식으로 저장된다. 배열 포인터는 다차원 배열의 포인터이다.
int arr[3][4];의 포인터 변수 선언은 int *ptr [4];와 같이 선언한다.자료형은 같게하고 포인터 변수명을 쓰고 대괄호 안에는 배열의 열의 갯수를 쓴다.
길이가 3인 1차원 배열 arr를 선언하고 arr+1을 출력하면 어떤 결과가 나올까? int arr[3]={1,2,3};printf("arr + 1 : ", arr + 1 ); [ arr = arr[0] ] 1차원 배열에서 배열의 이름은 배열의 첫번째 요소를 가리키고, int형 배열은 배열의 요소마다4Byte씩 사용 할 수 있다. 즉, arr의 크기는 12Byte이고 arr+1은 arr + 4Byte(자료형의 크기)라고 할 수 있다.arr + 1은 arr[1]인 것이다. 이제 2차원 배열의 포인터 연산을 해보자. int arr1[2][3];int arr2[3][5]; 위와같은 2차원 배열 2개를 선언한 후 각자 배열의 이름에 +1을 더해보자. #include #include "stdlib.h" int m..
1차원 배열의 이름은 포인터가 될 수 있지만 2차원 배열의 이름은 포인터가 될 수 없다.1차원 배열은 (배열의 이름 = 배열의첫번째요소 [0]) 였지만 밑의 그림을 보면 크기가 다른 것을 알 수 있다.2차원 배열 arr이름의 크기는 배열 전체의 크기인 21이, 배열의 첫번째요소는 1행에 해당하는 크기가 나왔다.이로 인해 1차원 배열과 달리 2차원 배열의 이름은 첫번째 요소와 서로 다르다는 것을 알 수 있다. #include #include "stdlib.h" int main(void) {int arr[2][3]; printf("%d\n", arr);printf("%d\n", arr[0]);printf("%d\n", &arr[0][0]);printf("\n");printf("%d\n", arr[1]);pr..
문제) 두개의 포인터 변수와 길이가5인 배열은 선언한 뒤 함수하나를 정의하여 함수를 호출했을 때 배열요소의 주소값중 가장 큰 주소값과 가장 작은 주소값이 출력되게 해보자. Q) 17-1.c #include #include "stdlib.h" void MaxnMin(int *arr, int **mxptr, int **mnptr) {int i, *max, *min;max=min = &arr[0]; for (i = 0; i arr[i])min = &arr[i];}*mxptr = max;*mnptr = min;} int main(void) {int arr[5];int *maxptr, *minptr;int i;for ..
* 더블 포인터란?더블 포인터란 포인터를 참조하는 포인터를 말하며, 일반적인 포인터는 싱글 포인터라고도 한다. int num=10; // 변수 선언int *ptr = # // 포인터 ptr에 num의 주소값을 초기화하여 num을 가리킴 (싱글 포인터)int **dptr = &ptr; // 포인터 dptr에 포인터 ptr의 주소값을 넣어서 결국엔 num을 가리키게됨 (더블 포인터) 밑의 예제 1을 보면 num1과 num2의 주소값을 포인터변수 ptr에 초기화 한 다음 함수를 이용하여 num1,2에 저장된 값을 바꾸려고 한다.하지만 컴파일을 해보면 값을 변하지 않고 그대로이다. 왜인지 생각해보고 답을 찾았다면 예제2를 보자. 예제1.c #include #include "stdlib.h" void Sw..
문제 1) 가로의 길이가 9 세로의 길이가 3인 int형 2차원 배열에 구구단 2,3,4단 다음과 같이 출력하여라. 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 Q) 16-1_1.c #include #include "stdlib.h" int main(void) {int gugu[3][9];int dan, num;int x=0, y;// 반복문 변수 /* 배열에 구구단 입력*/for (dan = 2; dan < 5; dan++) {y = 0;for (num = 1; num < 10; num++) {gugu[x][y] = dan * num;y++;}x++;} /* 출력 */for (x = 0; x < 3; x++) {y = ..
2차원 배열도 1차원 배열과 마찬가지로 선언과 동시에 초기화를 할 수 있다.그리고 그 방법은 여러가지이다. [1. 배열의 형태로 초기화 ① ] int arr1[3][3] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}}; [2. 배열의 형태로 초기화 ② ] int arr2[3][3] = {{1},{4, 5},{7, 8, 9}}; // 빈 공간의 배열은 0으로 채워진다. ! [3. 배열의 형태로 초기화 ③ ] int arr3[3][3] = {1,2,3,4,5,6,7};// 빈 공간의 배열은 0으로 채워진다. ! [4. 배열의 형태로 초기화 ③-1 ] int arr4[3][3] = { 1,2,3,4,5,6,7 }; * ③번과 ③-1번은 동일한 형태이다. 1~4번 출력.c #include #incl..
다차원 배열이란 ? 다차원 배열이란 2차원 이상의 배열을 말하며 4차원, 5차월 배열도 다차원 배열에 속한다.1차원 배열은 직선, 2차원 배열은 평면, 3차원 배열은 직육면체 구조의 배열이다. [ 다차원 배열 ] int arr[5]; // 1차원 배열, 0~5개의 방int arr[4][2]; // 2차원 배열, 4개의 행과 2개의 열int arr[3][3][3]; // 3차원 배열! [ 3차원 배열 ] 3차원 배열은 2차원 배열을 완벽하게 이해하였다면 쉽게 느껴질 것이다. double arr[4][5][6]; // 높이4, 세로5, 가로6 [ 2차원 배열 ] 2차원 배열은 다차원 배열을 대표 하는 배열이고 다차원 배열 하면 보통 2차우 배열을 자주 사용한다.1차원 배열과 다른 점은 배열에 [4]라고 선언..