배열 포인터
여러 표현 방식
*(ptr+i) == ptr[i] == i[ptr] == *(i+ptr)
//3번째는 이론으로만 알고 쓰지는 X
ptr == &ptr[0];
*ptr == ptr[0];
ptr+1 == ptr에 sizeof(*ptr)을 더한 값
배열 포인터 선언
int main(){
int arr[3] = {1,2,3};
int(*ptr_arr)[3];//길이 3인 int형 배열을 가리키는 포인터를 선언
ptr_arr = &arr;
}
예제
int main(){
int arr[2][3]={1,2,3,4,5,6};
for(int(*row)[3] = arr; row < arr+2; row++){
for(int *col = *row; col<*row+3; col++){
printf("%d ", *col);
}
printf("\n");
}
}
2차원 배열과 배열 포인터
int main(){
int arr[2][3] = {{1,2,3},{4,5,6}};
sizeof(arr); // 24
sizeof(arr[0]); //12
sizeof(arr[0][0]); //4
//&arr == &arr[0] == &arr[0][0]
int(*ptr)[3] = arr;
int(*ptr)[3] = &arr[0];
//printf("%d ", ptr[i][j]);로 출력 가능
}
ptr = arr
== ptr = &arr[0]
즉, ptr은 arr[0]을 가리키고 있다.
배열을 매개변수로 넘기기
//call-by-value: 값만
//call-by-reference: 참조
void printArr(int *arr){
for(int i=0;i<4;i++) arr[i]*=2;
}
void printArr(int arr[4]){
}
//both of the above are call-by-reference
//arr == &arr[0]
int main(){
int arr[4] = {1,2,3,4};
printArr(arr);
}
//2-dimension-array
void printArr(int n(*arr)[3]){
for(int i=0;i<2;i++){
for(int j=0;j<3;j++)
printf("%d ", arr[i][j]);
}
}
int main(){
int arr[2][3] = {{1,2,3},{4,5,6}};
printArr(arr);
}
'Language > C' 카테고리의 다른 글
[C] 함수 포인터 (0) | 2021.08.21 |
---|---|
[C] 문자열 (0) | 2021.08.21 |