Programming

C언어) 포인터 개념

summerorange 2022. 10. 8. 21:25
반응형

파이썬에서는 데이터 타입을 적는 걸 생략하고 바로 변수로 만들 수 있다. 이를 동적 타이핑 언어라고 한다. 

반대로, C언어에서는 변수 타입을 적어주어야 한다. 

이러한 변수(variable number) 개념은 포인터 개념과 관련이 있다.

포인터는 변수는 각각에 맞는 주소가 할당이 되어 있는데 포인터는 값을 찍어주는 게 아니라. 그 주소가 무엇인지 알려준다.

역참조는 그 주소 안의 값이 무엇인지 대신 반환해주는 것이다.

이 포인터 개념이 C언어에서 중요하게 여기는 개념이다.

예를 들어서,

void swap(int *p, int *q);
temp = *p;
*p = *q;
*q = temp;

int main에서 swap(&a, &b)가 있다고 한다면, swap에서 a의 주소와 b의 주소를 불러왔고, 해당 함수는 포인터 함수의 int *p, int *q를 가르킨다. *p는 역참조 함수로 a의 주소값이 아닌 값을 가지고 온다. *q도 마찬가지로 &b에서 불러오는 주소를 입력받는다.


---라고 예전에 정리했었는데,

그냥 문제로 푸는 게 이해하는 게 더 빠를 것 같다.

int pointfunc (char *);
int main() {
	char* p1 = "2022";
    char* p2 = "20221008";
    int n = pointfunc(p1);
    int m = pointfunc(p2);
    printf("%d", n+m);
    }

int pointfunc (char* p) {
	int count = 0;
    while (*p != '\0') {
    	count ++;
        p ++;
        }
   return count;
}

라는 코드가 있다면 count 되는 값은 무엇일까?

\0 은 도대체 왜 나오는 거고 수수께끼 처럼 생긴 * 표시는 무엇일까?

다음과 같다.

워드프레스 블로그에 정리했습니다.

https://sumorange.com/?p=1371 

 

C언어- 포인터 개념 설명 및 예시 – summerorange

C언어는 빛과 소금과 진리^^ 포인터 개념을 이해해보자! 우선 다음과 같은 문제를 풀어보자! 정답은? 과연 두구두구두구두구… #include int pointfunc (char *); int main() { char* p1 = "20210107"; char* p2 = "2022100

sumorange.com

반응형