배열과 포인터의 관계
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 |