본문 바로가기

C언어/복습

[C언어]DAY14_배열포인터

배열 포인터

//목표: 문자열(문자의 배열)을 위한 2차원 배열(문자열이 여러개)

//2차원 배열을 가리키기 위한 배열 포인터


#include <stdio.h>
#define ROW 3 //ROW : 줄
#define COL 100 //COL : 칸

//void print_array_2d()

int main()
{
	int i = 0;
	int j = 0;

	//문자열 여러개로 2차원 배열을 초기화
	char arr[ROW][COL] = { "Weclome", "to", "Neverland"};
	//위의 2차원 배열은 아래와 같은 효과
	
	char text[COL] = "Welcome";
	char* p_arr = text; //문제없음 text의 원소가 char이므로 둘다 char타입이 맞음.
	char(* p_arr2)[COL] = arr;  //p_arr은 char를 가리키는 포인터이지만, 
						//arr은 2차원 배열, 즉 원소는 1차원 배열이라는 의미이므로 타입이 다름. ERROR!

	char text2[COL] = "to";
	char text3[COL] = "Neverland";
	printf("%d %d\n",p_arr, p_arr++);
	printf("%d %d\n",p_arr2, p_arr2++);

	printf("%s\n", text);
	printf("%s\n", text2);
	printf("%s\n", text3);

	//for( i = 0; i < ROW; i++){
	//printf("%s\n", arr[i]);
	//}

	//print_array_2d(arr);
	for(i=0; i< ROW; i++){
		for(j =0; j < COL; j++){
			printf("%c", arr[i][j]);
		}
		printf("\n");
	}	
}

 


 

//배열포인터의 사용예

//함수에서 문자열 배열을 인자로 넘기고자 할 때

 

 

#include <stdio.h>
#define ROW 5
#define COL 20

//배열 포인터로 2차원 배열을 함수의 인자로 받을 수 있다.
//char(*p_str)[COL] = brand;
//배열은 받는 쪽(함수)에서만 크기를 알 수 있는 방법이 없으므로 인자로 무조건 받아야 한다.
void printf_string(char(*p_str)[COL], int count){
	int i=0;
	for( i=0; i< count; i++){
		//printf("%s\n", p_str[i]);

		//*참조연산자를 사용하여
		printf("%s\n", *(p_str+i));
	}
}

int main(){
	int i =0;

	char brand[ROW][COL] = { "LG","Apple", "Samsung", "Google", "Motorola"};
	char brand2[ROW][COL] = { "Apple", "Samsung", "Google", "Motorola"};
	printf_string(brand, ROW);
	printf_string(brand2, 4);

}