무엇을 가리키고 있습니까???
4738 단어 cppcsharpcprogramming
C 언어는 프로그램이 컴퓨터 메모리를 사용하는 방법에 대해 훨씬 더 많은 제어를 제공합니다. 배후에서 변수를 할당, 수정 또는 사용할 때마다 어떤 일이 발생하는지 살펴보겠습니다.
C 코드에는 포인터가 포함됩니다.
To best understand pointers, go slowly
포인터는 이해해야 할 가장 기본적인 것 중 하나입니다.
C 프로그래밍 언어. 그래서 포인터는 무엇입니까? 포인터는
메모리에 있는 데이터 조각의 주소입니다.
포인터는 다음과 같은 이유로 유용합니다.
설명을 위해 다음 코드를 살펴보십시오.
프로그램은 n을 100으로 시작하므로 n이 1씩 증가하면 이제 101이 됩니다. 적어도 코드가 작동하면 됩니다.
Look at the code carefully. Do you think it will work? Why? Why not?
> gcc addone.c -o addone
> ./addone
the value of n is 100
the value of n is now 100
흠, 왜 우리 함수가 작동하지 않았지?
C는 인수를 값으로 보냅니다.
C가 함수를 호출하는 방식 때문에 코드가 손상되었습니다.
그러나 그것이 C가 함수를 호출하는 방식이라면 값을 업데이트하는 함수를 어떻게 작성할 수 있습니까?
포인터를 사용하면 쉽습니다 ...
메모리 포인터 사용
1. 변수의 주소 얻기
&
연산자를 사용하여 변수가 메모리에 저장된 위치를 찾을 수 있습니다.int x = 4;
printf("x lives at %p\n", &x);
그러나 변수의 주소가 있는 경우 어딘가에 저장하고 싶을 수 있습니다. 이를 위해서는 포인터 변수가 필요합니다. 포인터 변수는 메모리 주소를 저장하는 변수일 뿐입니다. 포인터 변수를 선언할 때 어떤 종류의 데이터가 가리킬 주소에 저장되어 있는지 말해야 합니다.
int *address_of_x = &x;
printf("x lives at %p\n", address_of_x);
2. 주소 내용 읽기
메모리 주소가 있으면 거기에 저장된 데이터를 읽고 싶을 것입니다.
*
연산자를 사용하여 수행합니다.int value_stored = *address_of_x;
*
및 &
연산자는 반대입니다. &
연산자는 데이터 조각을 가져와 저장 위치를 알려줍니다. *
연산자는 주소를 받아 거기에 무엇이 저장되어 있는지 알려줍니다.Because pointers are sometimes called referrences, the
*
operator is said to dereference a pointer.
3. 주소 내용 변경
포인터 변수가 있고 변수가 가리키는 주소의 데이터를 변경하려면
*
연산자를 다시 사용하면 됩니다. 하지만 이번에는 과제의 왼쪽에 사용해야 합니다.*address_of_x = 99;
이제 메모리 위치(포인터)의 내용을 읽고 쓰는 방법을 알았으니 add_one() 함수를 수정할 차례입니다.
해결책
> gcc addone.c -o addone
> ./addone
the value of n is 100
the value of n is now 101
코드가 작동합니다.
이 함수는 포인터 인수를 사용하기 때문에 다음을 수행할 수 있습니다.
원래 n 변수를 업데이트합니다.
즉, 이제 함수를 만드는 방법을 알고 있다는 의미입니다.
값을 반환할 뿐만 아니라 모든 메모리를 업데이트할 수도 있습니다.
그들에게 전달되는 위치.
중요 항목
&
연산자는 변수*
연산자는 메모리 주소의 내용을 읽을 수 있습니다*
연산자는 메모리 주소의 내용도 설정할 수 있습니다Reference
이 문제에 관하여(무엇을 가리키고 있습니까???), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcsavvy/what-are-you-pointing-at-ohc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)