포인터(2)
- 함수의 매개변수의 종류에 따라 호출패턴(방식)이 다르다.
call by value
int f(int x){
return 2*(*x)+1;
}
f(3);
call by address
void f(int* x){
*x = 2*(*x)+1;
}
int data = 3;
int* PData = &data;
f(PData);
- 포인터의 사용이유 :
다른 지역에 있는 변수의 주소에 접근하여 값을 변경 혹은 수정할 수 있다.
#include <stdio.h>
void f(int*);
void main() {
int num = 0;
f(&num);
printf("%d\n", num);
}
void f(int* data) {
*data = 10;
}
//선택정렬 함수 만들기
#include <stdio.h>
void sort(int*, int);
void main() {
int arData[5] = { 1, 8, 9, 2, 6 };
int length = sizeof(arData) / sizeof(int);
sort(arData, length);
for (int i = 0; i < length; i++) {
printf("%d ", *(arData + i));
}
printf("\n");
}
void sort(int* list, int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = i+1; j < length;j++) {
if (*(list + i) > *(list + j)) {
int temp = *(list + i);
*(list + i) = *(list + j);
*(list + j) = temp;
}
}
}
}
//int형 변수를 선언하여 사용자에게 값을 입력받은 후
//해당 값을 2배로 바꿔주는 void타입 함수 선언 및 사용
//call by adress
//제곱으로 바꿔주는 void타입 함수 선언 및 사용
include <stdio.h>
void f(int*);
void g(int*);
void main() {
int num = 0;
int data = 0;
int* PData = &data;
scanf_s("%d", PData);
num = data;
f(PData);
printf("%d\n", *PData);
PData = #
g(PData);
printf("%d\n", *PData);
}
void f(int* data) {
*data *= 2;
}
void g(int* data) {
*data *= *data;
}
이중 포인터
: 포인터의 주소값을 담는 저장공간
포인터에 있는 주소값을 바꾸고 싶을 때, 사용

#include <stdio.h>
void main() {
int data = 10;
int * PData = &data;
int ** PPData = &PData;
printf("%p\n", &data);
printf("%p\n", PData);
printf("%p\n", *PPData);
}
#include <stdio.h>
void f(int**);
void main() {
int data = 10;
int* PData = &data;
printf("%d\n", *PData);
f(&PData);
printf("%d\n", *PData);
}
void f(int** x) {
int data = 20;
*x = &data;
}
정적배열
: 자동으로 내려간다.
동적배열
: 정적배열보다 느리다, 사용자가 직접 내려줘야한다.

'C언어 > 예습' 카테고리의 다른 글
[C언어 예습]DAY16_동적 할당, 동적 배열 (0) | 2020.02.10 |
---|---|
[C언어 예습]DAY15_인터배열과 배열포인터, 지역변수, 전역변수, static변수 (0) | 2020.02.10 |
[C언어 예습]DAY13_포인터(1) (0) | 2020.02.05 |
[C언어 예습]DAY12_함수의 응용(계산기) (0) | 2020.02.04 |
[C언어 예습]DAY11_함수의 선언과 사용 (0) | 2020.02.04 |