C언어 - 복합리터럴과 배열 ( Compound Literals )

2020. 11. 12. 16:10개인공부/C언어

 

 

 

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define ROWS 3
#define COLS 4

int sum_1d(int arr[], int n);
int sum_2d(int arr[][COLS], int rows);

int main() {

	int a = 1; // 1리터럴의 값을 a에 넣는것
	3; // Literal 은 기호 없는 상수. 
	3.14f;
	int b[2] = { 3,4 }; // 3,4두개의 숫자가 brace로 묶여있고
						// b라는 심볼로 인식할수있는 2개짜리 배열에 들어간것.
	(int[2]) {3, 4};	// 기호가 없다, compound literal

	//int c[2] = (int[2]){3,4}; // Error

	int arr1[2] = { 1,2 };
	int arr2[2][COLS] = { {1,2,3,4},{5,6,7,8} };

	printf("%d\n", sum_1d(arr1, 2)); // 배열을 함수에 전달할수 있음
	printf("%d\n", sum_2d(arr2, 2));
	printf("\n");

	printf("%d\n", sum_1d(
							(int[2]) { 1, 2 },
							2)
						); 
	printf("%d\n", sum_2d(
		(int[2][COLS]) { {1, 2, 3, 4}, { 5,6,7,8 } }
		,2)); //배열을 리터럴 처럼 바로 넣음
	printf("\n");

	int* ptr1;
	int(*ptr2)[COLS];
	
	ptr1 = (int[2]){ 1,2 };
	ptr2 = (int[2][COLS]){ {1, 2, 3, 4}, { 5,6,7,8 } };

	printf("%d\n", sum_1d(ptr1, 2)); // 배열을 함수에 전달할수 있음
	printf("%d\n", sum_2d(ptr2, 2));
	printf("\n");

	return 0;
}

int sum_1d(int arr[], int n) {
	int total = 0;
	for (int i = 0; i < n; ++i)
		total += arr[i];
	return total;
}

int sum_2d(int arr[][COLS], int rows){
	int total = 0;
	for (int r = 0; r < rows; r++)
		for(int c = 0; c< COLS; c++)
			total += arr[r][c];
	return total;
}



 

 

 

 

 

 

 

 

 

출처 : 홍정모의 따라배우는 C언어