어질어질한 포인터 세계Language/C언어2021. 9. 26. 23:10
Table of Contents
어질어질한 포인터 세계, 도서관에서 빌린 포인터 서적이 궁금하기도 하고 좀 더 알아보고 싶어 대여를 했는데, 어질어질하다
과연 이런 코드를 내가 쓸까? 싶긴 하지만, 이해를 하고 넘어가고 싶어 블로그에 적는다
배열을 복사해서
1
2
3
4
5
6
7
8
9
|
#include <stdio.h>
int main(){
int arr[6] = { 1, 2, 3, 4, 5, 6};
int *cp = arr + 5;
printf("%d, %d, %d, %d, %d, %d", cp[0], cp[-1], cp[-2], cp[-3], cp[-4], cp[-5]);
return 0;
}
|
cs |
이와 같이 쓴다던가 혹은 포인터 배열을 2차원 배열로 사용을 한다면,
1
2
3
4
5
6
7
8
9
|
#include <stdio.h>
int main(){
int arr[4] = { 1, 2, 3, 4};
int(*ap)[2] = (int(*) [2])arr;
printf("%d %d %d %d", ap[1][1], ap[1][0], ap[0][1], ap[0][0]);
return 0;
}
|
cs |
arr 배열을 포인터 형태의 2차원 배열로 치환하여 ap 라는 곳으로 넣게 된다.
그러나 여기서 중요한 것은 괄호를 제대로 치지 않으면 에러가 뜨게 된다는 점이다.
기본적으로 포인터를 쓸때에는 *arr+2 이와 같은 형식으로 썼는데, 이러한 방식도 있구나하며 이해만 하고 넘어가야될 것 같다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h>
struct _point{
int x;
int y;
};
int main(){
struct _point sarr[3] = {1, 1, 2, 2, 3, 3};
printf("%d %d\n", sarr->x, sarr->y);
printf("%d %d\n", (sarr+2)->x, (sarr+2)->y);
printf("%d %d\n", (*(sarr+1)).x, (*(sarr+1)).y);
}
|
cs |
sarr->x == sarr[0].x
'Language > C언어' 카테고리의 다른 글
열거형 enum 사용 (3) | 2021.09.05 |
---|
@jaewpark :: 코스모스, 봄보다는 늦을지언정 가을에 피어나다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!