검색결과 리스트
C에 해당되는 글 76건
- 2018.10.03 (8-3)Pointer
글
(8-3)Pointer
C/C언어 이론
2018. 10. 3. 18:47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | #include <stdio.h> void main() { /* 배열과 포인터 - 배열명은 첫 번째 요소의 주소 (시작주소/첫번째byte) > 2차원 배열에서 [][] 인덱스를 하나만 [] 사용하면 한 행의 시작주소 - 배열변수를 포인터변수에 저장하면 똑같이 다룰 수 있다. > 차이점 1. 크기 2. 변수의 연산 여부 */ int iArr[5] = { 1,2,3,4,5 }; int * pArr = iArr; // iArr가 주소 값이기 때문에 대입이 가능! int i = 0; printf("배열명 자체의 값 : %d\n", iArr); // 생성된 배열의 시작 주소 printf("배열 첫 번째 요소의 주소 : %d\n", &iArr[0]); // iArr와 같다. printf("배열명이 가리키는 값 : %d\n", *iArr); // 주소값 앞에는 * 간접참조연산을 사용 가능 printf("배열 첫 번째 요소의 값 : %d\n", iArr[0]); printf("포인터 변수의 값 : %d\n", pArr); printf("포인터의 첫 번째 주소 : %d\n", (pArr+0) ); // +0이라서 pArr이다. printf("포인터의 두 번째 주소 : %d\n", (pArr+1) ); // // 주소값 + 정수 --> 자료형 크기에 맞게 정수와 곱해진다. // int 라면, +1을 했을 때 주소 값이 +4 가 된다. (int는 4byte) // double 이라면, +2 를 했을 때 주소 값이 +16이 된다. (dobuble이 8byte) printf("포인터가 가리키는 값 : %d\n", *pArr); printf("포인터의 첫 번째 값 : %d\n", *(pArr+0) ); // +0이라서 pArr이다. printf("포인터의 두 번째 값 : %d\n", *(pArr+1) ); // printf("===============\n"); for(i = 0; i < 5; i++) // 편의상 iArrLen을 구하지 않음... (귀찮..) { printf("[%d회차 수행]\n", (i+1)); printf("배열 각 요소의 주소 : %d\n", (iArr+i)); printf("배열 각 요소의 값 : %d\n", *(iArr+i)); printf("배열 각 요소의 값 : %d\n", *(iArr)+i); // 첫요소 + i printf("포인터 각 요소의 주소 : %d\n", &pArr[i]); printf("포인터 각 요소의 값 : %d\n", pArr[i]); // 배열 변수와 포인터 변수는 둘 다 주소 값을 의미 // 배열 변수로도 주소값+정수 를 사용할 수 있다. // 포인터 변수로 인덱스를 사용할 수 있다. // --> 주소값+정수 형태 보다는 인덱스 형태가 우리에게 좀 더 보기 편함 } printf("================\n"); // 차이점 // (1) 크기 printf("iArr의 크기 : %d\n", sizeof(iArr)); printf("pArr의 크기 : %d\n", sizeof(pArr)); // 포인터변수의 크기는 무조건 4 // (2) 연산 여부 for(i = 0; i < 5; i++) { /* printf("포인터 각 요소의 값 : %d\n", *pArr); pArr++; // pArr = pArr + 1; pArr += 1; -> pArr의 값이 변경 */ /* printf("포인터 각 요소의 값 : %d\n", *(pArr++)); // 후위증감 // pArr 변수에 저장된 주소 값을 사용하고 난 뒤, 1 증가 */ /* printf("포인터 각 요소의 값 : %d\n", *(++pArr)); // 전위증감 // pArr 변수의 값을 1증가 시킨 뒤, 그 값을 사용 */ // iArr++; // 이거 안 됨 : 배열명은 생성되는 순간 '상수' 처리된다. // 상수 : 변경할 수 없는 값 // 배열명 자체는 연산으로 값을 변경하는 행위가 불가능 } printf("for문이 끝난 뒤 pArr가 가리키는 값 : %d\n", *pArr); } | cs |
'C > C언어 이론' 카테고리의 다른 글
(9-1)struct (0) | 2018.10.03 |
---|---|
(8-4)Pointer (0) | 2018.10.03 |
(8-2)Pointer (0) | 2018.10.03 |
(8-1)Pointer (0) | 2018.10.03 |
(7-4)Array (0) | 2018.10.03 |