happy coding
[lecture] C언어복습.포인터 활용 본문
이중 포인터(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
[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
'lecture > data structure' 카테고리의 다른 글
[lecture] C언어복습.연결리스트 (0) | 2022.12.29 |
---|---|
[lecture] C언어복습.동적메모리 (0) | 2022.12.29 |
[lecture] C언어복습.포인터 (0) | 2022.12.28 |
[lecture] C언어복습.배열 (0) | 2022.12.27 |
[lecture] C언어복습.구조체 (1) | 2022.12.27 |