C

1차원, 2차원 배열과 포인터

김꼬알 2023. 4. 3. 19:05

배열과 포인터의 관계

int a[5];    // a라는 배열 0~4까지 생성

int*b = a;    // 포인터 변수 b는 a의 주소값

a[2] = 10;    // 배열 a[2]의 값은 10

b[2] = 20;    // 포인터 변수 두번째 공간이므로 배열 a[2]의 값이 20

 

#include<stdio.h>
int main(void){
    int i;
    int a[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};    // 배열로 나열
    int *ptr = a + 3;    // ptr의 값은 a의 주소값 100 + 3
    for(i = 0; i < 5; ++i){    // i값이 5보다 작을 때까지 아래 괄호문 수행
    	printf("%d", *(ptr+i)-3);    // 괄호안의 ptr+i 를 먼저 수행한 다음 가리키는 값 대입한 후 -3
    }
}

 

#include<stdio.h>
int main(void){
    int a[] = {1, 2, 4, 8};
    int *p = a;    // 포인터 변수 p 는 배열 a 와 같음
    p[1] = 3;
    a[1] = 4;
    p[2] = 5;
    printf("%d %d\n", a[1] + p[1], a[2] + p[2]);
    return 0;
}

 

#include<stdio.h>
int main(void){
    int a[4] = {10, 20, 30};
    int *p = a;
    p++;    // p+1 이므로 101
    *p++ = 100;    // 101이 가리키는 값에 100을 대입한 다음 +1
    *++p = 200;    // 102+1을 먼저 수행한 후 가리키는 값에 200을 대입
    printf("a[0]=%d, a[1]=%d, a[2]=%d\n", a[0], a[1], a[2]);
}

 

#include<stdio.h>
void main(){
    int num[4] = {1, 2, 3, 4};
    int *pt = num;
    pt++;    // pt = 101이 됨
    *pt++= 5;    // pt가 가리키는 값(101의 값)에 5를 대입한 후 +1
    *pt++= 10;    // pt가 가리키는 값(102의 값)에 10을 대입한 후 +1
    pt--;    // 103-1 = 102
    *pt++ += 20;    // pt가 가리키는 값(102의 값)에 +20을 수행한 후 +1
    printf("%d %d %d %d", num[0], num[1], num[2], num[3]);
}

 

 

2차원 배열과 포인터

int a[3][2] = {{1, 2}, {3, 4}, {5, 6}};

printf("%d\n", a);  // 100
printf("%d\n", *a);  // 100
printf("%d\n", **a);  // 1

 

#include<stdio.h>
int main(){
    int data[][3] = {1, 3, 4, 5, 2, 9, 6, 8, 7}    // 열이 3개 이므로 3개씩 나눔
    int *p = data[1];    // 포인터 변수 p는 data[1]의 주소이므로 103
    int x, y;
    x = *p;    // x는 p의 값이므로 5
    y = *(p+2);    // 괄호 안을 먼저 계산, 103+2의 값이므로 9
    printf("x=%d, y=%d\n", x, y);
}

 

#include<stdio.h>
int main(){
    int darr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int sum1, sum2;
    sum1 = *(*darr+1) + *(*darr+2);    // 101 자리의 값 2 + 102 자리의 값 3 = 5
    sum2 = *darr[1] + *darr[2];    // 103 자리의 값 4 + 106 자리의 값 7 = 11
    printf("%d, %d, sum1, sum2);
}

 

'C' 카테고리의 다른 글

구조체, 포인터 이동  (0) 2023.04.05
포인터 배열  (0) 2023.04.04
배열, 포인터, scanf  (0) 2023.03.28
for, 다중 for 문, continue, break  (0) 2023.03.14
반복문(while, do ~ while, for), if 문  (0) 2023.03.14