C 언어 포인터를 이해하는 간단한 예 ~ 누구나 알 수있는 포인터의 장점 ~
포인터를 이해하는 단계
값 및 참조 정보
메모리의 데이터는
이 두 가지로 구성된 이미지입니다.
【C언어】포인터
주소를 참조
값을 값
라고 부르는 것이 일반적입니다.
함수 인수 정보
C 언어에서는 함수 인수에 값만 전달할 수 있습니다.
그래서 함수의 인수에 인스턴스를 건네주고 그 인스턴스에 함수 내에서 변경을 하기 위해서는 포인터라는 주소를 값으로 취급하는 변수가 필요합니다! ! ! (여기 중요)
포인터가 없는 경우와 있는 경우의 샘플 코드
Main.c
#include <stdio.h>
typedef struct list {
int first;
int second;
int sum;
int sub;
} list;
// ポインタなしの関数
void sum_and_sub(list list) {
printf("list address in sum(): %d\n", &list);
list.sum = list.first + list.second;
printf("sum in sum(): %d\n", list.sum);
list.sub = list.first - list.second;
printf("sub in sum(): %d\n", list.sub);
}
// ポインタありの関数
void sum_and_sub_pointer(list *list) {
printf("list address in sum_pointer(): %d\n", list);
list->sum = list->first + list->second;
printf("sum in sum_pointer(): %d\n", list->sum);
list->sub = list->first - list->second;
printf("sub in sum_pointer(): %d\n", list->sub);
}
int main(void) {
struct list list1;
list1.first = 1;
list1.second = 5;
list1.sum = 0;
list1.sub = 0;
printf("list1 address in main(): %d\n", &list1);
sum_and_sub(list1);
printf("sum by sum(): %d\n", list1.sum);
printf("sub by sum(): %d\n", list1.sub);
sum_and_sub_pointer(&list1);
printf("sum by sum_pointer: %d\n", list1.sum);
printf("sub by sum_pointer: %d\n", list1.sub);
}
list1 address in main(): -1886710432
list address in sum(): -1886710416
sum in sum(): 6
sub in sum(): -4
sum by sum(): 0
sub by sum(): 0
list address in sum_pointer(): -1886710432
sum in sum_pointer(): 6
sub in sum_pointer(): -4
sum by sum_pointer: 6
sub by sum_pointer: -4
sum 함수는 호출자에 의해 정의된
.first
, .second
를 받을 수 있습니다.하지만 sum 함수 내에서
.total
에 할당된 값을 호출한 main 함수에서 참조할 수 없습니다.sum_pointer 함수에서 sum_pointer 함수 내에서
.total
에 할당된 값을 호출한 main 함수에서 참조할 수 있었습니다 ~~주소가 제대로 전달되었음을 알 수 있습니다.
요약
인스턴스 내용을 업데이트하고 싶다면 포인터를 사용할 수 있습니다.
보충
매우 매우 쉽게 포인터의 장점, 개념을 설명하는 기사입니다. 그 밖에도 가득한 장점이 있습니다.
- 반환값이 하나이지만, 복수의 값을 인스턴스내에 보관 유지해, 예호원에게 반환할 수 있다
- 메모리 절약
등등
자세한 것은 다른 기사를 봐주세요!
Reference
이 문제에 관하여(C 언어 포인터를 이해하는 간단한 예 ~ 누구나 알 수있는 포인터의 장점 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maejimayuto/items/d8804435e8814d3a0ae4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)