다음은 C언어에서 포인터와 배열을 사용하는 다양한 예제들입니다.
- 2차원 배열과 포인터를 이용한 요소 접근 및 출력
#include <stdio.h>
int main() {
int arr[3][4] = {0};
int (*ptr)[4] = arr;
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) {
arr[i][j] = i * 4 + j + 1;
printf("%d ", *(ptr[i] + j));
}
printf("\n");
}
}
- N*N 크기의 나선형 행렬 생성
#include <stdio.h>
void spiralMatrix(int N) {
int matrix[N][N], val = 1, top = 0, bottom = N - 1, left = 0, right = N - 1;
while (top <= bottom && left <= right) {
for (int i = left; i <= right; ++i) matrix[top][i] = val++;
top++;
for (int i = top; i <= bottom; ++i) matrix[i][right] = val++;
right--;
if (top <= bottom) {
for (int i = right; i >= left; --i) matrix[bottom][i] = val++;
bottom--;
}
if (left <= right) {
for (int i = bottom; i >= top; --i) matrix[i][left] = val++;
left++;
}
}
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) printf("%3d", matrix[i][j]);
printf("\n");
}
}
int main() {
int N = 5;
spiralMatrix(N);
}
- 학생들의 성적 총합 계산 함수 작성
#include <stdio.h>
void calcTotalScores(int n, float scores[][8]) {
for (int i = 0; i < n; ++i) {
scores[i][0] = 0;
for (int j = 1; j <= 7; ++j) scores[i][0] += scores[i][j];
}
}
int main() {
int n = 3;
float scores[3][8] = {{0, 89, 78, 92, 85, 96, 88, 91},
{0, 76, 85, 90, 88, 79, 81, 84},
{0, 90, 88, 93, 91, 87, 95, 92}};
calcTotalScores(n, scores);
for (int i = 0; i < n; ++i) printf("Student %d Total: %.2f\n", i + 1, scores[i][0]);
}
-
변수 선언의 의미 설명 a)
int a;- 정수 변수 a 선언 b)int *a;- 정수 포인터 변수 a 선언 c)int **a;- 이중 포인터 변수 a 선언 d)int a[10];- 크기가 10인 정수 배열 a 선언 e)int (*a)[10];- 크기가 10인 정수 배열을 가리키는 포인터 a 선언 -
2차원 배열 복사
#include <stdio.h>
void copyArray(int src[][4], int dest[][4], int rows, int cols) {
for (int i = 0; i < rows; ++i)
for (int j = 0; j < cols; ++j)
dest[i][j] = src[i][j];
}
int main() {
int src[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
int dest[3][4];
copyArray(src, dest, 3, 4);
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j) printf("%d ", dest[i][j]);
printf("\n");
}
}
- 문자열 길이 반환 함수 작성
#include <stdio.h>
int stringLength(char *str) {
int len = 0;
while (*(str + len) != '\0') len++;
return len;
}
int main() {
char str[] = "HelloWorld";
printf("Length of the string is %d\n", stringLength(str));
}
- sizeof 연산자로 배열과 포인터 크기 출력
#include <stdio.h>
int main() {
int arr[3][4] = {0};
printf("%zu\n", sizeof(arr)); // 전체 배열 크기
printf("%zu\n", sizeof(arr[0][0])); // 단일 요소 크기
printf("%zu\n", sizeof(arr[0])); // 첫 번째 행 크기
printf("%zu\n", sizeof(arr[0] + 1)); // 포인터 크기
printf("%zu\n", sizeof(*(arr[0] + 1))); // 단일 요소 크기
printf("%zu\n", sizeof(arr + 1)); // 포인터 크기
printf("%zu\n", sizeof(*(arr + 1))); // 첫 번째 행 크기
printf("%zu\n", sizeof(&arr[0] + 1)); // 포인터 크기
printf("%zu\n", sizeof(*(&arr[0] + 1))); // 첫 번째 행 크기
printf("%zu\n", sizeof(*arr)); // 첫 번째 행 크기
printf("%zu\n", sizeof(arr[3])); // 경고 발생 가능
}