Language/C
[따배씨] 9.17 포인터 변수의 크기 ~ 9.18 포인터형 매개변수
migrationArc
2021. 6. 3. 23:23
따배씨 - 따라하며 배우는 C언어
9강 함수
9.17 포인터 변수의 크기
#include <stdio.h>
int main(){
char a;
float b;
double c;
char* ptr_a = &a;
float* ptr_b = &b;
double* ptr_c = &c;
printf("%zd %zd %zd\n", sizeof(a), sizeof(b), sizeof(c));
// 1 4 8
printf("%zd %zd %zd\n", sizeof(ptr_a), sizeof(ptr_b), sizeof(ptr_c));
// 8 8 8
printf("%zd %zd %zd\n", sizeof(&a), sizeof(&b), sizeof(&c));
// 8 8 8
printf("%zd %zd %zd\n", sizeof(char*), sizeof(float*), sizeof(double*));
// 8 8 8
return 0;
}
- 주소 값을 저장하는 메모리 크기는 8 byte - 64bit 운영체제
- 32bit 운영체제 - 4byte
9.18 포인터 Pointer 형 매개변수
#include <stdio.h>
void swap1 (int a, int b);
void swap2 (int* a_ptr, int* b_ptr);
int main(){
int a = 123;
int b = 456;
printf("%p %p\n", &a, &b);
// 0x7ffeefbff488 0x7ffeefbff484
swap1(a, b);
// 0x7ffeefbff44c 0x7ffeefbff448
swap2(&a, &b);
// 0x7ffeefbff488 0x7ffeefbff484
return 0;
}
void swap1(int a, int b){
printf("%p %p\n", &a, &b);
}
void swap2(int *a_ptr, int *b_ptr){
printf("%p %p\n", a_ptr, b_ptr);
}
- 변수를 받아 처리하면, 호출된 함수 영역에서 새로운 변수가 생성됨
- 다른 메모리 주소를 가진, 새로운 값
#include <stdio.h>
void swap (int* a_ptr, int* b_ptr);
int main(){
int a = 123;
int b = 456;
printf("%d %d\n", a, b);
// 123 456
swap(&a, &b);
printf("%d %d\n", a, b);
// 456 123
return 0;
}
void swap(int *a_ptr, int *b_ptr){
int temp = *a_ptr;
*a_ptr = *b_ptr;
*b_ptr = temp;
}
- 새로운 함수에서 main 함수 영역의 변수에 포인터를 이용하여 직접 접근
- 변수명으로 호출: call by value
- 포인터 주소로 호출: call by pointer, call by address
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
http://blog.naver.com/atelierjpro
실리콘 밸리의 프로그래머 : 네이버 블로그
안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.
blog.naver.com
http://www.inflearn.com/course/following-c
홍정모의 따라하며 배우는 C언어 - 인프런 | 강의
'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원
www.inflearn.com