#include <stdio.h>
#include <stdlib.h>
int main(void)
{
/* test 1 */
int arr[5] = {10,20,30,40,50};
int *p = arr;
printf("%d ", *p);
printf("%d ", *p++);
printf("%d ", (*p)++);
printf("%d ", *(p++)); //왜 21이 나오지?, p++먼저 해서 p의 주소값을 하나 올리고 그 값을 출력하니까 30 아닌가?
printf("%d ", *p);
printf("\n\n");
/* test 2 */
int arr1[5] = {10,20,30,40,50};
int *p = arr1;
printf("%d ", *p);
printf("%d ", ++*p);
printf("%d ", ++(*p));
printf("%d ", *(++p));
printf("%d ", *++p);
printf("%d ", *p);
printf("\n\n");
/* test 3 */
int *arr2 = (int *)malloc(sizeof(int)*5);
arr2 = arr1;
*++arr2;
/* test 4 */
int arr3[5] = {10,20,30,40,50};
*arr3++; //error
*++arr3; //error
/* test 5 */
int a1 = 5;
int a2 = 5;
printf("%d ", a1++);
printf("%d ", ++a2);
}
1. (test 1, test 2) 포인터로 받아온 배열은 증감 연산이 가능하다. 즉, 정적배열의 포인터를 copy한 것은 변경(증감연산)이 가능하다.
test 1 수행 결과: 10 10 20 21 30
test 2 수행 결과: 10 11 12 20 30 30
2. (test 3) 동적배열의 포인터는 증감연산이 가능하다.
3. (test 4) 배열 자체로는 증감 연산이 불가능하다. 즉, 정적배열의 포인터는 상수(const)포인터이므로 변경이 불가능하다. 정적배열은 내부에서 이름이 int * const 형태로 선언된다.
error 메세지: pointeradd.c:33:3: error: lvalue required as increment operand *++arr3;
4. (test 5) 기본 실험.
수행 결과: 5, 6
'Computer Science > Algorithm' 카테고리의 다른 글
[정적 변수] Static variable 실행 예제 (0) | 2020.10.13 |
---|---|
Heap sort (힙정렬) (0) | 2020.09.03 |
Merge Sort (병합 정렬) (0) | 2020.09.03 |
[배열과 포인터] 일차원 배열과 이차원 배열 및 포인터 표기 방법 (0) | 2020.09.01 |
[구조체] struct 선언 방법들 (0) | 2020.09.01 |