본문 바로가기

C언어

컴프 9주차 요약

<함수 호출시 인수 전달 방법>

  • 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);
}

'C언어' 카테고리의 다른 글

컴프 12주차  (0) 2023.11.18
컴프 11주차  (0) 2023.11.10
컴프 10주차  (0) 2023.11.04
컴프 7주차  (0) 2023.10.14
6주차 복습  (0) 2023.10.10