배열: 자료형이 같은 변수를 연속으로 메모리에 할당한 것
배열요소들은 일정한 간격으로 주소를 가지고 있음
ary = &ary
ary + 1 = &ary[1]
*(ary + 1) = ary[1]
배열명은 주소 --> 포인터에 저장 가능
함수로 베열을 처리하려면 포인터 필요
배열명 ary는 첫번째 배열요소의 주소인데 이 주소값을 인수로 주면 함수는 이 값을 받아 주소 계산을 통해 모든 배열 요소 사용가능
배열명을 받을 함수의 매개변수 자리에 포인터 필요
(주소를 저장할 포인터 필요하기 때문!)
함수를 호출할때는 배열명 / 함수의 매개변수로는 포인터
*배열명 vs 포인터
1. sizeof 연산 결과 다름
sizeof(ary) = 배열 전체 크기, 12
sizeof(pa) = 포인터 하나의 크기 ,4
2. 변수, 상수의 차이
포인터 = 변수 / 배열 = 상수
간접참조 연산자와 전위표현 함께 사용x
*(++pa) 는 pa의 값이 먼저 증가된 후에 증가된 pa가 가리키는 배열요소를 간접참조하므로 두번째 배열 요소부터 출력
따라서 마지막 출력되는 값은 쓰레기값
#include<unistd.h>
void ft_print(char arr[3])
{
write(1, arr, 3); 👌배열명은 주소이므로 &생략!
if (!(arr[0] == '7' && arr[1] == '8' && arr[2] == '9'))
{
write(1, ",", 1);
write(1, " ", 1);
}
}
void ft_print_comb(void)
{
char arr[3];
arr[0] = '0';
arr[1] = '1';
arr[2] = '2';
while (arr[0] <= '7')
{
while (arr[1] <= '8')
{
while (arr[2] <= '9')
{
ft_print(arr);
arr[2]++;
}
arr[1]++;
arr[2] = arr[1] + 1; ✨초기화
}
arr[0]++;
arr[1] = arr[0]; ✨초기화
}
}