char str[10]={'\0'};
2. 함수에 입력하는 매개변수(argument), 반환값(return)으로써 쓰일 때 배열의 동학을 더 잘 알 수 있다.
void fun1(int a[]/const int a[]/int *a/const int *a){
...
<CodeBlocks에선 *(a+i) 꼴, a[i] 꼴 둘 다 사용 가능하다. 이로 보아 배열의 이름과 포인터가 본질적으로 같음을 알 수 있다. 다른 예로 int arr[10]; int *p=arr; 이 경우엔 p가 포인터임에도 배열과 정확히 같은 행동을 하는데, 따라서 포인터가 배열의 시작점을 가리키면 자동으로 배열로 판단하고 그 크기 등의 정보를 수집하는 것으로 보인다.
또한 CodeBlocks 도구에서 a[111]도 문제없이 실행된다. 여분의 메모리가 있는 것일까? 메모리 누수와 관련있을지도.>
}
int main(){
int arr[100];
fun1(arr);
...
또한 위의 예로 보아 포인터가 매개변수로 사용되면 참조되는 변수가 scope를 벗어나 요청된 함수에서도 접근 가능함을 알 수 있다.
함수에서 배열을 반환하려면 다음과 같은 방법을 쓸 수 있다.
int *fun1(){
static int arr[10];
return arr;
}
이 예를 보면 알 수 있듯 배열 자체를 반환하는 것은 아니며 배열의 시작점 주소를 이용한다. 위에선 static을 사용했지만 전역 변수 등도 가능하다.
함수에서 배열을 반환하려면 다음과 같은 방법을 쓸 수 있다.
int *fun1(){
static int arr[10];
return arr;
}
이 예를 보면 알 수 있듯 배열 자체를 반환하는 것은 아니며 배열의 시작점 주소를 이용한다. 위에선 static을 사용했지만 전역 변수 등도 가능하다.
페이스북 댓글