happy coding

[lecture] C언어복습.포인터 활용 본문

lecture/data structure

[lecture] C언어복습.포인터 활용

yeoonii 2022. 12. 28. 17:49

이중 포인터(double pointer)란 포인터를 가리키는 포인터이다. 예를 들어 q는 포인터 p를 가리키는 이중 포인터인데 여기서 p는 int형 변수인 i를 가리키는 포인터이다. 여기서 **q 앞의 자료형은 q가 포인팅하는 변수의 타입이다. 

*(*q) = 200인 경우 뒤쪽에 있는 *연산을 먼저 하고, 괄호 밖의 *연산을 진행한다.

이중 포인터를 사용하는 이유는, 포인터 값을 인수를 통해 받아와야 할 때 포인터의 주소를 통해 받아와야 하기 때문에 사용한다. 

여기서 p[1]이 dzf로 바뀌지 않는 이유는 운영체제 에서 막아놨기 때문에(?) > 위의 배열과 포인터를 구분할 줄 알아야 한다.

문자열 배열에서 가장 많이 사용되는 건 포인터 배열이며, 이는 문자열들을 효율적으로 저장할 수 있다. 포인터 배열(array of pointers)은 포인터를 모아서 배열으로 만든 것이다. 

문자열 상수는 문자열의 시작 번지를 반환한다. 포인터 배열의 각 원소들은 이 시작번지로 초기화된다.

함수 포인터(function pointer)는 함수를 가리키는 포인터이다. 형태는 반환형 (*함수포인터이름)(매개변수1, 매개변수2, ...); 함수도 메모리에 코드 형태로 존재하기에 함수도 주소를 가진다.

함수 포인터의 배열의 형태는 반환형 (*배열이름[배열의 크기])(매개변수목록); 이며, 

함수 포인터는 인수로 전달 또한 가능해 특정 함수를 호출하게 할 수 있다. 

다차원 배열과 포인터에서, 1행>2행>.. 순으로 행우선 방법으로 메모리에 저장하게 된다. 배열 이름 m은 &m[0][0]이고, 여기서 m[0]은 1행의 시작 주소를 의미한다. 각각의 배열의 이름인 m[0], m[1], m[2]는 그 배열의 시작 주소이다. 따라서 &m[0][0] == m[0], &m[1][0] == m[1], &m[2][0] == m[2] 로 표현할 수 있다. 2차원 배열과 포인터 연산에서, m[0] = m, m[1] = m+1, m[2] = m+2 각각의 시작주소가 같다. 여기서 m의 타입을 따져보았을 때, m[][]에서의 m은 integar형 3개의 배열을 포인터로 대응하는 int (*p) [3] = m; 이라고 말할 수 있다. m[0]의 타입은, int *q = m[0]; 

각 함수에 대한 main함수 만들기

void 포인터 순수하게 메모리의 주소만 가지고 있는 포인터를 의미한다. 예를 들어, Hello World! 할 때 쓰는 void main(void){} > 괄호 안의 void는 argument가 없다라는 것을 의미, 반환형에서의 void는 반환할 게 없다는 의미이다. 여기서 가리키는 대상물은 아직 정해지지 않는다. 예를 들어 int main(void)는 일반적인 형태이고, int main(int argc, char *argv[])는 외부로부터 입력을 받는 main()함수 형태 이다.

 


~̆̈https://kldp.org/node/156899

 

int *p , int(*p)의 차이점이 뭔가요 | KLDP

글쓴이: 익명 사용자 / 작성시간: 금, 2017/02/03 - 11:05오전 int *p , int(*p)의 차이점이 뭔가요 찾아봐도 영문 사이트 밖에없어서 반환값이 다르다고 하는데 먼말인지 이해가 안되네요 ㅜ

kldp.org

https://www.geeksforgeeks.org/difference-between-int-p-and-int-p/

 

Difference between int* p() and int (*p)()? - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

https://ggodong.tistory.com/28

 

포인터(Pointer) .. 왜 쓸까요? (1)

C 언어의 꽃 포인터(Pointer)입니다. 대학 시절 때도 포인터에 막혀서 제 학점을 후루룩 말아 잡쉈는데, 이제 피할 수 없는 시기가 와서 한번 정리를 하려고 합니다. 포인터는 왜 쓸까요? 포인터 변

ggodong.tistory.com

https://wonit.tistory.com/527

 

[C 언어] 포인터로 2차원 배열 다루기 (주소 접근 및 원소 값 접근)

2차원 배열의 형태 우리가 2차원 배열과 포인터에 대한 상관관계를 파악하고 조작하기 위해서는 2차원 배열이 메모리에 어떻게 저장되는지 알아야 한다. 다음과 같은 배열이 존재한다고 가정해

wonit.tistory.com

https://m.blog.naver.com/sharonichoya/220501242693

 

C언어 main( ) 함수의 명령 인수 (argc, argv)

* main 함수의 매개변수는 보통 아무것도 사용하지 않지만(int main ( ) ) 경우에 따라서는 int main (int ...

blog.naver.com

 

Comments