2차원 벡터를 참조로 전달하는 C 프로그래밍
포인터를 사용하여 전달
- 함수 선언:
void print_vector(int *vector, int rows, int cols);
- 함수 호출:
int main() {
int vector[2][3] = {{1, 2, 3}, {4, 5, 6}};
print_vector(&vector[0][0], 2, 3);
return 0;
}
-
설명:
vector
는 2차원 배열의 첫 번째 요소를 가리키는 포인터입니다.rows
는 2차원 배열의 행 수입니다.
typedef를 사용하여 전달
- 헤더 파일:
typedef int Vector[2][3];
void print_vector(Vector vector, int rows, int cols);
- 소스 파일:
#include "header.h"
int main() {
Vector vector = {{1, 2, 3}, {4, 5, 6}};
print_vector(vector, 2, 3);
return 0;
}
-
Vector
는int
형 2차원 배열을 나타내는 새로운 타입입니다.print_vector
함수는Vector
타입의 변수를 받습니다.
두 가지 방법의 장단점
-
포인터를 사용하는 방법:
-
장점:
- 코드가 간단합니다.
-
단점:
- 포인터를 사용하는 것은 위험할 수 있습니다.
- 메모리 누수가 발생할 가능성이 있습니다.
-
-
typedef
를 사용하는 방법:-
- 코드가 더 안전합니다.
-
참고:
- C++에서는 2차원 벡터를 참조로 전달하는 더 간단한 방법이 있습니다.
std::vector
클래스를 사용하면 포인터나typedef
를 사용하지 않고 2차원 벡터를 참조로 전달할 수 있습니다.
예제 코드
#include <stdio.h>
// 포인터를 사용하여 2차원 벡터를 참조로 전달
void print_vector(int *vector, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", vector[i * cols + j]);
}
printf("\n");
}
}
// typedef를 사용하여 2차원 벡터를 참조로 전달
typedef int Vector[2][3];
void print_vector2(Vector vector, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", vector[i][j]);
}
printf("\n");
}
}
int main() {
// 포인터를 사용하는 방법
int vector[2][3] = {{1, 2, 3}, {4, 5, 6}};
print_vector(&vector[0][0], 2, 3);
// typedef를 사용하는 방법
Vector vector2 = {{1, 2, 3}, {4, 5, 6}};
print_vector2(vector2, 2, 3);
return 0;
}
1 2 3
4 5 6
1 2 3
4 5 6
- 이 예제 코드는 두 가지 방법 모두 2차원 벡터를 함수에 참조로 전달하는 방법을 보여줍니다.
print_vector
함수는 포인터를 사용하여 2차원 벡터를 받습니다.- 두 함수 모두 2차원 벡터의 모든 요소를 출력합니다.
2차원 벡터를 참조로 전달하는 대체 방법
typedef struct Vector {
int rows;
int cols;
int **data;
} Vector;
#include "header.h"
void print_vector(Vector vector) {
for (int i = 0; i < vector.rows; i++) {
for (int j = 0; j < vector.cols; j++) {
printf("%d ", vector.data[i][j]);
}
printf("\n");
}
}
int main() {
Vector vector;
vector.rows = 2;
vector.cols = 3;
vector.data = malloc(sizeof(int *) * vector.rows);
for (int i = 0; i < vector.rows; i++) {
vector.data[i] = malloc(sizeof(int) * vector.cols);
}
// 2차원 벡터의 값을 초기화합니다.
print_vector(vector);
free(vector.data);
return 0;
}
-
Vector
구조체는 2차원 벡터를 나타냅니다.data
는 2차원 벡터의 데이터를 가리키는 포인터입니다.
void print_vector(int **vector, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", vector[i][j]);
}
printf("\n");
}
}
int main() {
int vector[2][3] = {{1, 2, 3}, {4, 5, 6}};
print_vector(&vector, 2, 3);
return 0;
}
-
vector
는 2차원 배열을 가리키는 참조 변수입니다.
- 구조체를 사용하는 방법은 가장 안전하고 유연한 방법입니다.
- 참조 변수를 사용하는 방법은 가장 간단한 방법이지만, 포인터를 사용하는 것만큼 위험할 수 있습니다.
c pointers multidimensional-array