일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리
- 지식나눔강좌
- 연산자
- 포인터
- Visual Studio
- Programming
- 문법
- 배열
- 김성엽
- Javascript
- Tips프로그래밍강좌
- tipssoft
- c
- 백준
- 이지스퍼블리싱
- c++
- CS
- Direct2D
- VS ERROR
- 리뷰
- Windows
- 프로그래밍
- 알고리즘
- Desktop
- c#
- doit코틀린프로그래밍
- 함수
- Win32
- Tips강좌
- Kotlin
- Yesterday
- Today
- Total
목록포인터 (14)
F.R.I.D.A.Y.
C6385 문제와 동일한 원인으로 발생하는 것으로 판단되는 경고 발생 재현 해당 문제 또한 C6385에서 언급한 것처럼 포인터 문법을 사용해 동적할당을 하는 경우에 잘 발생합니다. MS 공식 문서에 따르면 범위를 벗어난 공간에 접근하는 경우 문제가 발생하므로 해당 문제를 알아차릴수 있도록 C6386 경고를 띄우는 것으로 알려져 있습니다. 원인 C6385와 마찬가지로 Visual Studio[# Microsoft Visual Studio Community 2019 버전 16.10.2]의 인텔리센스의 문제로, 코드에서 범위를 알 수 없기 때문에 해당 경고를 발생시킵니다. 경고 해제 경고 해제는 다음 포스트를 참고하세요. pragma disable vs pragma suppress 경고 예외 처리를 위해 코드..
메모리 관련 작업을 하면 주로 보이는 C6385 발생 재현 C6385 경고는 주로 메모리 할당 관련 작업을 할 때 일어납니다. MS 공식 문서의 내용을 보면 접근이 허용된 메모리 공간을 벗어난 경우에 이런 경고를 띄우는 것으로 안내하고 있습니다. int arr[10]; int i = 0; while(i
함수 포인터 또한 자료형입니다. 모든 자료형은 배열로 만들 수 있다고 했는데요, 이번에는 함수 포인터 배열을 만들어봅니다. # 배열, 함수 포인터를 먼저 알고 있어야 합니다. 선언 방법 먼저 배열의 선언 방법을 되돌아봅니다. type arrayName[length]; // ex) int arr[10]; 함수 포인터의 선언 방법은 다음과 같습니다. returnType (*var)(parameters); // ex) int (*user_abs)(int); returnType: 함수 포인터로 가리킬 함수의 반환형 parameters: 함수 포인터로 가리킬 함수의 인자 만일 printf를 가리킬 수 있는 함수 포인터 배열을 선언하고자 한다면 아래와 같이 작성하면 됩니다. int (*fp)(const char *..
포인터는 신기하게도 함수까지 가리킬 수 있습니다. 어차피 이름이 있으니 이름으로 사용하면 될 텐데 뭐가 좋으냐는 생각을 할 수 있겠지만 이번에 그 생각이 바뀌실 겁니다. # 포인터에 대한 내용을 알고 있어야 합니다. 정적인 것은 싫어요 무엇이든 코드에 명시되어 있다면 이를 수정하기 위해서는 전부 다시 컴파일을 진행해야 합니다. 그러나 포인터를 이용한다면 포인터만 명시되어있지 포인터가 가리키는 내용은 코드에 명시하지 않도록 할 수 있습니다. 따라서 포인터를 사용하면 컴파일을 하지 않고도 실제 작업 내용의 변경이 가능[# 게임을 예로 들면 사소한 버그는 패치로 바로잡곤 합니다. 그런 것이라고 보면 됩니다.]합니다. 함수도 마찬가지입니다. 함수 포인터 함수 포인터는 말 그대로 함수를 가리킬 수 있는 포인터입니..
자료형은 저마다 크기가 존재합니다. C언어의 기중 중 하나로 볼 수 있는 포인터도 예외는 아닌데요, 포인터의 크기는 어떻게 정해졌는지 알아봅니다. 프로그램 버전에 종속적 아래 포스트에서 잠깐 언급한 적이 있습니다. 프로젝트에서 개발하는 프로그램이 32비트인지 확인하는 방법 Windows OS가 설치된 드라이브를 보면 Program Files이란 폴더와 뒤에 (x86)이라 붙은 폴더가 있습니다. 각각의 폴더는 64비트, 32비트로 개발된 프로그램이 설치되는 기본 폴더를 의미합니다. 그렇다면 64비트.. pang2h.tistory.com 지금 개발 중인 프로그램이 32비트라면 포인터는 4Byte, 64비트 프로그램이라면 포인터는 8Byte로 크기가 고정됩니다. 이 크기는 각 운영체제에서 가용할 수 있는 최대..
배열을 만들게 되면 다차원 배열을 만들기도 합니다. 종종 각 요소의 값을 변경해야 하는 경우도 존재합니다. 배열 연산자로 만든 정적 배열과, 포인터와 동적 할당을 이용해 만든 동적 배열을 비교해봅니다. 다차원 배열 선언 포인터와 배열로 2차원[# 포인터에는 맞지 않는 용어이지만 편의상 이렇게 부르겠습니다.] 배열을 만들어 보겠습니다. // using pointer // dynamic array #include #include int main(void){ int **p; p = malloc(sizeof(int*) * 10); for(int i = 0; i
배열 변수의 이름이 0번 인덱스의 시작 주소인 이유 이번 포스트는 제목 그대로 배열 변수의 이름이 어째서 해당 배열의 0번 인덱스의 주소가 되는지 알아봅니다. 간단해요! int arr[10]; &arr[0]; // 처음 배울 때 주로 사용하는 0번 인덱스의 주소를 가져오는 법.. pang2h.tistory.com 위 글에서는 배열의 첫 요소의 주소는 해당 배열의 이름임을 간단히 설명하고 있습니다. 어째서 이런 결론이 나오게 되는지, 어떤 배경이 있었는지 알아보겠습니다. # 여기에서 (정적)배열은 소스코드에 직접 배열 문법으로 선언된 자료형을 말합니다. 태초에 포인터가 있었다 신께서 세계를 만들 때 법칙을 몇 가지 만들었으니, 그중 하나가 指 법칙이라. 이 법칙은 널리 사용되어야 했으며 충분히 많은 곳에서..
지난 시간에 우리는 포인터의 기본적인 내용을 배웠습니다. 포인터(pointer) 잘 배워가던 사람들도 멈추는, 일명 C언어에서 첫 번째 고비라 일컬어지는 포인터입니다. 하다 보면 쉽지만 막상 처음 하면 난생처음 보는 문법에 쓰는 방법도 독특한지라 많이들 힘들어합니다. # 선행으로 함수.. pang2h.tistory.com 이젠 포인터의 한 단계 더 높은, 다차원[# 지난 시간에도 말씀드렸지만 원서의 포인터 파트에서는 차원(dimension)이라는 표현은 없습니다. 역자들이 번역해올 때 정확한 명칭을 정하지 못해 배열의 차원이라는 단어를 가져온 것입니다. 이번 포스트에서는 차원이란 단어로 소개했으므로 차원으로 통일하겠습니다.\n용어를 올바르게 바꾸고자 노력하는 분이 계시니 만일 더 나은 단어나 반대 의견이..
잘 배워가던 사람들도 멈추는, 일명 C언어에서 첫 번째 고비라 일컬어지는 포인터입니다. 하다 보면 쉽지만 막상 처음 하면 난생처음 보는 문법에 쓰는 방법도 독특한지라 많이들 힘들어합니다. # 선행으로 함수를 알아야 합니다. 사용자로부터 입력받기 우리가 사용자로부터 값을 입력받을 때, 표준 입출력 함수를 사용하곤 합니다. 대표적으로 scanf[# scanf_s 또한 표준입니다. scanf_s에 대한 자세한 내용은 https://pang2h.tistory.com/200을 참고하세요.]가 존재하겠네요. #include int main(void){ int num; scanf("%d", &num); printf("%d\n", num); return 0; } 그렇다면 우리도 scanf 함수처럼 값을 입력받도록 해보..
이번 포스트는 제목 그대로 배열 변수의 이름이 어째서 해당 배열의 0번 인덱스의 주소가 되는지 알아봅니다. 간단해요! int arr[10]; &arr[0]; // 처음 배울 때 주로 사용하는 0번 인덱스의 주소를 가져오는 법입니다. &*(arr + 0); // 처음 코드는 위와 같이 변경할 수 있습니다. &*(arr); // 0은 더하든 말던 값의 변화가 없으므로 지울 수 있습니다. (arr); /* 간접 참조 연산자(*)와 주소 연산자(&)는 곱셈과 나눗셈처럼 서로 상반 관계입니다. 따라서 함께 없앨 수 있습니다. */ arr; // 불필요한 괄호를 지워줍니다. // 따라서 // &arr[0] == arr 입니다. 이 내용은 포인터를 배우다보면 알게되는 내용입니다 :) 이 표현법을 알게 되면 대괄호를 ..