C 언어
C++에서 포인터는 다른 변수의 주소를 보유하는 변수를 나타냅니다. 일반 변수와 마찬가지로 포인터에는 데이터 유형이 있습니다. 예를 들어, 정수 유형의 포인터는 정수 유형의 변수 주소를 보유할 수 있습니다. 문자 유형의 포인터는 문자 유형의 변수 주소를 보유할 수 있습니다.
포인터를 메모리 주소의 상징적 표현으로 봐야 합니다. 포인터를 사용하여 프로그램은 참조에 의한 호출을 시뮬레이션할 수 있습니다. 또한 동적 데이터 구조를 만들고 조작할 수 있습니다. C++에서 포인터 변수는 다른 변수가 가리키는 메모리의 특정 주소를 가리키는 변수를 의미합니다.
이 C++ 자습서에서는 다음을 배우게 됩니다.
C++ 포인터를 이해하려면 컴퓨터가 데이터를 저장하는 방식을 이해해야 합니다.
C++ 프로그램에서 변수를 만들면 컴퓨터 메모리에 약간의 공간이 할당됩니다. 이 변수의 값은 할당된 위치에 저장됩니다.
데이터가 저장된 컴퓨터 메모리의 위치를 알기 위해 C++는 & (참조) 연산자. 연산자는 변수가 차지하는 주소를 반환합니다.
예를 들어, x가 변수이면 &x는 변수의 주소를 반환합니다.
C++의 선언은 다음 구문을 사용합니다.
datatype *variable_name;
다음은 C++에서 유효한 포인터 선언의 예입니다.
int *x; // a pointer to integer double *x; // a pointer to double float *x; // a pointer to float char *ch // a pointer to a character
참조 연산자(&)는 변수의 주소를 반환합니다.
역참조 연산자(*)는 메모리 주소에 저장된 값을 가져오는 데 도움이 됩니다.
예:
num이라는 이름이 지정된 변수가 있고 주소 0x234에 저장되고 값 28을 저장하는 경우
참조 연산자(&)는 0x234를 반환합니다.
역참조 연산자(*)는 5를 반환합니다.
#include <iostream> using namespace std; int main() { int x = 27; int *ip; ip = &x; cout << "Value of x is : "; cout << x << endl; cout << "Value of ip is : "; cout << ip<< endl; cout << "Value of *ip is : "; cout << *ip << endl; return 0; }
출력:
작동 방식:
다음은 코드의 스크린샷입니다.
코드 설명:
배열과 포인터는 관련 개념을 기반으로 작동합니다. 포인터가 있는 배열로 작업할 때 주의해야 할 다른 사항이 있습니다. 배열 이름 자체는 배열의 기본 주소를 나타냅니다. 즉, 포인터에 배열의 주소를 할당하려면 앰퍼샌드(&)를 사용하면 안 됩니다.
예:
p = arr;
위의 내용은 arr이 배열의 주소를 나타내므로 정확합니다. 다음은 또 다른 예입니다.
p = &arr;
위의 내용은 올바르지 않습니다.
암시적으로 배열을 포인터로 변환할 수 있습니다. 예:
int arr [20]; int * ip;
다음은 유효한 작업입니다.
ip = arr;
위의 선언 이후에 ip와 arr은 동등하며 속성을 공유하게 됩니다. 그러나 ip에는 다른 주소를 할당할 수 있지만 arr에는 아무 것도 할당할 수 없습니다.
이 예는 포인터를 사용하여 배열을 탐색하는 방법을 보여줍니다.
#include <iostream> using namespace std; int main() { int *ip; int arr[] = { 10, 34, 13, 76, 5, 46 }; ip = arr; for (int x = 0; x < 6; x++) { cout << *ip << endl; ip++; } return 0; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
할당할 정확한 주소가 없으면 포인터 변수에 NULL을 할당할 수 있습니다. 선언 중에 수행해야 합니다. 이러한 포인터를 널 포인터라고 합니다. 그 값은 0이며 iostream과 같은 많은 표준 라이브러리에 정의되어 있습니다.
#include <iostream> using namespace std; int main() { int *ip = NULL; cout << "Value of ip is: " << ip; return 0; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
C++를 사용하면 컴퓨터 메모리에서 직접 데이터를 조작할 수 있습니다.
메모리 공간은 원하는 대로 할당하거나 다시 할당할 수 있습니다. 이것은 포인터 변수에 의해 가능합니다.
포인터 변수는 다른 변수가 가리키는 컴퓨터 메모리의 특정 주소를 가리킵니다.
다음과 같이 선언할 수 있습니다.
int *p;
또는,
int* p;
you 예제에서 포인터 변수 p를 선언했습니다.
메모리 주소를 보유합니다.
별표는 포인터를 의미하는 역참조 연산자입니다.
포인터 p는 메모리 주소의 정수 값을 가리키고 있습니다.
#include <iostream> using namespace std; int main() { int *p, x = 30; p = &x; cout << "Value of x is: " << *p; return 0; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
C++의 함수는 하나의 값만 반환할 수 있습니다. 또한 함수에서 선언된 모든 변수는 함수 호출 스택에 할당됩니다. 함수가 반환되자마자 모든 스택 변수가 파괴됩니다.
함수에 대한 인수는 값으로 전달되며 변수에 대한 수정은 전달되는 실제 변수의 값을 변경하지 않습니다. 다음 예는 이 개념을 설명하는 데 도움이 됩니다.-
예 5:
#include <iostream> using namespace std; void test(int*, int*); int main() { int a = 5, b = 5; cout << "Before changing:" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; test(&a, &b); cout << "\nAfter changing" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void test(int* n1, int* n2) { *n1 = 10; *n2 = 11; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명:
함수 테스트 내부의 변수와 b에 새로운 값을 할당하더라도, 함수 호출이 완료되면 외부 함수 main에 반영되지 않습니다.
포인터를 함수 인수로 사용하면 함수에서 변수의 실제 주소를 전달하는 데 도움이 되며 변수에 대해 수행된 모든 변경 사항은 외부 함수에 반영됩니다.
위의 경우 함수 'test'는 변수 'a'와 'b'의 주소를 갖습니다. 이 두 변수는 'test' 함수에서 직접 액세스할 수 있으므로 이러한 변수에 대한 변경 사항은 호출자 함수에 반영됩니다. '메인'
다음은 포인터 사용의 장점/장점입니다.
C 언어
C에서 Switch 문이란 무엇입니까? C의 switch 문 변수의 값을 테스트하고 여러 사례와 비교합니다. 대소문자 일치가 발견되면 해당 특정 사례와 관련된 명령문 블록이 실행됩니다. 스위치 블록의 각 케이스에는 식별자라고 하는 다른 이름/번호가 있습니다. 사용자가 제공한 값은 일치하는 항목을 찾을 때까지 switch 블록 내부의 모든 케이스와 비교됩니다. 대소문자가 일치하지 않으면 기본 문이 실행되고 제어가 스위치 블록을 벗어납니다. 이 튜토리얼에서는 배우게 될 것입니다- C에서 Switch 문이란 무엇입니까? 대소문
포인터는 하나의 값을 반환하도록 제한되는 C 함수에 큰 가능성을 제공합니다. 포인터 매개변수를 사용하면 이제 함수에서 데이터 복사본이 아닌 실제 데이터를 처리할 수 있습니다.변수의 실제 값을 수정하기 위해 호출 문은 함수의 포인터 매개변수에 주소를 전달합니다.여기에서 튜토리얼, 당신은 배울 것입니다- 함수 포인터의 예 배열 매개변수가 있는 함수 배열을 반환하는 함수 함수 포인터 함수 포인터 배열 void 포인터를 사용한 함수 인수로서의 함수 포인터 함수 포인터의 예 예를 들어, 다음 프로그램은 두 값을 2로 교환합