Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- programmers
- dfs
- 인프런
- BASIC
- 따배씨
- 따라하면서 배우는 C언어
- C언어
- Algorithm
- BFS
- greedy
- Cleancode
- 종만북
- JavaScript
- server
- BOJ
- String
- graph
- web
- 따라하며 배우는 C언어
- DP
- 생활코딩
- php
- Python
- udemy
- 백준
- Algospot
- 정수론
- C
- sorting
- Math
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 10.15 포인터의 호환성 본문
따배씨 - 따라하며 배우는 C언어
10강 배열과 포인터
10.15 포인터의 호환성 Compotaibility
- 문법적으로 가능하지만, 사용상 권장하지 않는 내용이 많이 포함됨
#include <stdio.h>
int main(){
int n = 5;
double x;
x = n;
int* p1 = &n;
double* pd = &x;
pd = (double *)p1;
return 0;
}
- pointer의 형변환, 권장 X
#include <stdio.h>
int main(){
int* pt;
int (*pa)[3]; // 3개짜리 원소를 가진 배열의 포인터
int arr1[2][3] = {3, };
int arr2[3][2] = {7,};
int** pt2; // 이중 포인터
pt = &arr1[0][0];
return 0;
}
pt = &arr1[0][0];
pt = arr1[0];
- 같은 표현
- 일차원 배열의 pointer 를 이용하여 다차원 배열의 원소를 모두 접근 가능
pt = arr;
// Error
- 이차원 배열은 포인터에 담을 수 없음
#include <stdio.h>
int main(){
int* pt;
int (*pa)[3]; // 3개짜리 원소를 가진 배열의 포인터
int arr1[2][3] = {3, };
int arr2[3][2] = {7,};
int** pt2; // 이중 포인터
pa = arr1;
pa = arr2;
return 0;
}
pa = arr2;
// Warning
int *(pa)[3];
int arr2[3][2];
- 원소의 숫자가 맞지 않음
- 권장하지 않는 사용 방법
#include <stdio.h>
int main(){
int* pt;
int (*pa)[3]; // 3개짜리 원소를 가진 배열의 포인터
int arr1[2][3] = {3, };
int arr2[3][2] = {7,};
int** pt2; // 이중 포인터
pt2 = &pt;
*pt2 = arr2[0];
pt2 = arr2;
return 0;
}
pt2 = arr2;
// Warning
- 형식이 맞지 않음
- pt2 : 인트에 대한 포인터에 대한 포인터
- arr2 : 두개의 인트를 가진 배열에 대한 포인터
#include <stdio.h>
int main(){
int x = 20;
const int y = 23;
int* p1 = &x;
const int* p2 = &y;
const int** pp2 = &p1; // Warning
//*p2 = 123; // Error // *p2 == y, y 는 const
//p1 = p2; // Warning (Error) // const int 를 int 에 할당하기 때문에 Warning
p2 = p1;
int x2 = 30;
int* p3 = &x2;
*pp2 = p3;
pp2 = &p1; // Warning
return 0;
}
*p2 = 123; // Error
- *p2 는 y 와 같고, y 는 const 로 선언 되었기 때문에 값을 변경 할 수 없음
//p1 = p2; // Warning (Error)
- const int 를 int 에 할당하기 때문에 Warning
const int** pp2 = &p1; // Warning
- Initializing 'const int ' with an expression of type 'int ' discards qualifiers in nested pointer types
- compiler 에서 허용
pp2 = &p1; // Warning
- Assigning to 'const int ' from 'int ' discards qualifiers in nested pointer types
- compiler 에서 허용
#include <stdio.h>
int main(){
const int** pp2;
int* p1;
const int n = 13;
pp2 = &p1; // const?
*pp2 = &n; // steps p1 to point at n
*p1 = 10; // change n
return 0;
}
- const 로 선언한 변수를 pointer 로 회피해서 변경하는 방법은 사용하지 말자
- c++ 에서는 엄격하게 금지, Error
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
http://www.inflearn.com/course/following-c
'Language > C' 카테고리의 다른 글
[따배씨] 10.17 변수로 길이를 정할 수 있는 배열 (VLAs) (0) | 2021.06.08 |
---|---|
[따배씨] 10.16 다차원 배열을 함수에게 전달해 주는 방법 (0) | 2021.06.08 |
[따배씨] 10.14 2차원 배열과 포인터 (0) | 2021.06.06 |
[따배씨] 10.12 포인터에 대한 포인터 (2중 포인터) 의 작동 원리 ~ 10.13 포인터의 배열과 2차원 배열 (0) | 2021.06.06 |
[따배씨] 10.11 배열 매개변수와 const (0) | 2021.06.06 |
Comments