<함수 호출시 인수 전달 방법>
- Call-by-value (인수의 값을 매개변수로 전달)
#include <stdio.h>
void f1(int x){
x = x + 10;
}
int main(void){
int a = 5;
f1(a); //인수의 값을 전달
printf("%d\n", a);
}
- Call-by-reference (인수의 주소값을 매개변수로 전달)
#include <stdio.h>
void f1(int *p){
*p = *p + 10;
}
int main(void){
int a = 5;
f1(&a); //인수의 주소값을 전달
printf("%d\n", a);
}
예1)
void swap(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main(void)
{
int a = 100, b = 200;
printf("a=%d b=%d\n", a, b);
swap(&a, &b);
printf("a=%d b=%d\n", a, b);
}
void changeData(int p[], int size) // int *p
{
int i;
for (i = 0; i < size; i++)
p[i] = 99; // *(p + i)
}
void printData(int p[], int size) // int *p
{
int i;
for (i = 0; i < size; i++)
printf("%d ", p[i]); // *(p + i)
printf("\n");
}
int main(void)
{
int data[5] = {1, 2, 3, 4, 5};
changeData(data, 5); // data 는 어떤 의미? 배열의 이름 = 배열 첫번째 원소의 주소값
printData(data, 5);
}
void stringCopy(char *s1, const char *s2)// *s2 는 바뀌지않으므로 const 를 붙일수
{
while (*s2) { // *s2 != ‘\0’, ‘\0 의 아스키값은 0 이다
*s1= *s2;
s1++;
s2++;
}
*s1 = '\0'; // 반드시 문자열의 끝을 null 문자로 채워야
}
int main(void)
{
char copied[10];
char data[] = "abc";
stringCopy(copied, data);
}
void print_array(int pa[][3], int size) //print_array(int (*pa)[3], int size)와 같음
{
int i, j;
for (i = 0; i < size; i++)
for (j = 0; j < 3; j++)
printf("%d ", pa[i][j]);
}
int main(void) {
int array[][3] = {{1, 22, 70}, {23, 80, 34}, {90, 20, 4}, {40, 99, 30}};
int rowNb = sizeof(array) / sizeof(array[0]); // 48/12
print_array(array, rowNb);
}