값에 의한 전달
함수를 호출할 때 넘겨주는 인자의 값을 함수 정의에 있는 매개변수로 복사해서 전달하는 방식
포인터에 의한 전달
함수의 처리 결과를 인자로 받아올 수 있음
void GetResult(int x,int y,int *sum,int *product{
*sum=x+y;
**product=xy;
함수는 return 1개 근데 여러 개 하고 싶을 때 포인터 사용
배열의 전달
배열은 값에 의한 전달 대신 포인터에 대한 전달 방법으로 전달
함수의 매개변수는 배열의 원소에 대한 포인터 형으로 선언함
함수의 인자로 배열을 전달할 때는 포인터를 받아오지만 함수 안에서는 일반 배열처럼 사용하면 된다.
void PrintArray(int *arr) →이렇게 매개변수는 포인터형
{
int i;
for(i=0;i<5;i++)
printf(”arr[%d]=%d\\n”,i,**arr[i**]);→arr포인터 변수지만 배열처럼
배열 입력 인자 전달→문자열을 size 안 보냄 단 나머지는 다 보냄
배열을 인자로 갖는 함수를 호출할 때는 인자로 배열의 주소를 넘겨줘야 함—>배열의 이름을 넘겨줌(왜냐면 배열 이름 자체가 주소니까)
int main(){
int x[5]={1,2,3,4,5}
PrintArray(x); } → 함수 호출 시 배열의 시작 주소 전달(배열 이름)
함수에 인자를 전달할 때 배열의 크기를 함께 넘겨줄 수 있다.
배열의 크기를 꼭 넘겨주어야 함
int x[5]={10,20,30,40,50};
PrintArray(x, 5);
배열을 인자로 갖는 함수 정의 시
배열의 원소에 대한 포인터 형을 매개 변수의 데이터 형으로 지정
포인터 형으로 쓰는 대신 크기를 생략한 배열로 써주기도 함 arr[]
void PrintArray(int *arr, int size);
void PrintArray(int arr[], int size); 위아래 다 같은 의미
배열이 함수 안에서 이용만 될 뿐 변경되지 않을 때는 매개변수의 포인터 형에 const 지정
void PrintArray(const int* arr, int size);
void PrintArray(const int arr[],int size);
구조체 전달
구조체를 값에 의한 전달 방법으로 전달하면 함수를 호출할 때마다 구조체가 복사된다
POINT p1 = {100,200};
PrintPoint(p1);
void PrintPoint(POINT p)
{
printf(”(%d, %d)\n”,p.x, p.y);
}
main 함수에서 구조체 변수가 p1이었으면 전달한 구조체 안 변수들 그대로 복사해오고 구조체 변수는 p로 변함
즉, 그냥 그대로 쓰면 됨 구조체 변수만 바꿔서
구조체를 포인터로 전달하면 구조체의 주소를 전달하므로 불필요한 구조체의 복사를 막을 수 있다
POINT p1 = {100,200};
PrintPoint(&p1); (POINT *p = &p1);
void PrintPoint(POINT *p){
printf(”(%d,%d)\n”,p → x, p → y);}
구조체가 함수 안에서만 이용되고 변경되지 않을 때는 매개
수학 관련 함수
#include<math.h> 사용해야함
abs() → 절댓값, pow(x,2)→x**2,
sqrt()→루트
,
문자열 처리 함수
#include<string.h>
strcpy(x,y)→문자열을 복사(y를 x에)
strlen()→문자열 길이 구함
strcat(x,y)→x와y연결
strcmp(x,y)→x와y문자열 비교
'Programming 언어 > C언어' 카테고리의 다른 글
포인터 (0) | 2023.01.20 |
---|---|
문자열 입력 함수 (0) | 2023.01.19 |