C언어 기초 함수 포인터
C언어 기초 함수 포인터 이번 글에서는 C언어 기초 중에서 함수 포인터에 대해서 기본 개념과 선언하는 방법을 알아보겠습니다. 우리가 정의하는 함수도 변수와 마찬가지로 메모리에 저장되는데요. 함수의 이름이 그 주소 값을 의미하는 것입니다. 즉, 이 주소 값을 저장하기 위한 별도의 함수 포인터를 선언할 수 있습니다. 함수 포인터도 선언하기 위해서는 먼저 포인터 형을 결정지어야 하는데 다음과 같은 함수가 있다고 가정해볼게요. int aaa(int x){...} 이 함수는 반환형과 매개변수 모두 int형인 aaa라는 함수입니다. 그리고 앞에서 정의한 대로 'aaa'는 이 함수의 메모리상의 주소 값을 저장하고 있는데요. 함수 포인터는 이 반환형과 매개변수를 기준으로 포인터 형을 결정짓습니다. 그래서 이 함수의 주..
C언어 독학 배열을 인자로 전달하기
C언어 독학 배열을 인자로 전달하기 배열이란 같은 자료형을 여러 개 모아 놓은 데이터의 형식인데요. 이 데이터를 함수에 인자로 전달할 수 있을까요? 지금까지 공부하면서 정리했던 대로 배열의 이름은 포인터 변수와 와 똑같은 역할을 하기 때문에 배열의 이름을 인자로 전달하면 그 배열의 첫 번째 요소의 주소 값이 전달됩니다. 하지만 함수에서는 매개변수로 배열을 사용할 수 없기 때문에 난관에 부딪치게 되는데요. 이때 매개변수에 포인터 변수는 사용할 수가 있습니다. 즉 배열로 전달하고 포인터 변수로 받아서 그 주소 값을 찾아가면 되는 거예요. 포인터 변수와 배열은 모두 변수의 메모리상의 주소 값을 저장하는 역할을 하기 때문에 가능한 것입니다. 말이 좀 어렵네요. ㅎㅎ 그래도 배열을 전달하고 포인터 변수로 받으면 ..
C언어 프로그램 포인터 배열
C언어 프로그램 포인터 배열 ■ 포인터도 변수이다. 데이터가 저장된 메모리의 주소를 저장하는 변수이기 때문에 포인터도 배열을 선언할 수 있으며 선언 방식은 다음과 같다. int * aaa[10]; double * bbb[20]; 이렇듯 선언하는 방법은 일반 변수의 배열을 선언하는 방법과 같다. 이렇게 배열로 선언된 포인터를 이용하는 예제를 간단히 만들어본다. ▲ int형 변수 su1~su4까지 각각 값들을 초기화하고 이 변수들의 주소 값을 저장할 arr 포인터 변수의 배열을 선언하고 있으며 각 주소 값으로 초기화 하고 있다. 그리고 * 연산자로 각각의 요소에 접근해서 저장된 값을 출력하고 있는 내용인데 프로그램을 실행하면 각각의 변수에 저장된 값이 순서대로 출력되는 걸 확인할 수 있다. 이처럼 포인터도 ..
C언어 독학 배열 이름은 포인터이다
C언어 독학 배열 이름은 포인터이다 ■ 배열은 같은 자료형의 데이터를 메모리에 연속으로 저장하는 것이고 포인터는 특정 변수의 메모리상의 주솟값을 저장하는 것인데요. 글의 제목처럼 배열 이름이 포인터라면 배열도 값이 저장된 메모리의 주솟값을 저장하고 있다는 의미겠죠? 다음 예제를 통해서 그 결과를 확인해보겠습니다. ▲ a [] 배열에 int형 자료형 세 개를 저장하고 있는데요. 서식 문사 "%p"를 이용해서 각 요소들의 값을 출력해보겠습니다. 그리고 배열의 이름 a의 값도 출력해볼게요. ▲ 이 프로그램의 실행 결과에서 알 수 있듯이 배열의 이름이 가리키고 있는 주소와 배열의 첫 번째 요소가 가리키고 있는 주소의 위치가 같습니다. 즉, 배열의 이름은 저장된 메모리의 첫 번째 요소의 주소값을 저장하고 있다는 ..
c언어 독학 포인터 변수의 초기화
c언어 독학 포인터 변수의 초기화 ■ 어떤 변수든 선언할 때 또는 나중에 값을 넣어서 초기화를 해줘야 하는데요. 다른 변수에 비해서 포인터 변수는 이 초기화에 특히 주의를 해야 합니다. 이 녀석을 이용하면 메모리의 특정 주소에 직접 접근할 수도 있고 그곳에 저장된 값을 변경할 수도 있기 때문인데요. 만약에 포인터 변수를 초기화하지 않고 값을 대입해버리면 어떤 결과가 나올까요? 예제에서 확인해볼게요. ▲ int 변수 x를 선언하고 100으로 초기화 한 후 int형 포인터 변수 aa를 선언하고 초기화를 하지 않은 상태에서 *aa를 이용해서 aa가 가리키고 있는 메모리에 200을 대입하고 있습니다. 그리고 그곳에 *aa에 200이 제대로 대입됐는지 확인하기 위해서 값을 출력하고 있는 모습입니다. 이 프로그램은..