포인터를 배우면 가장 먼저 작성하는 함수 중 하나인 스왑함수 swap

#include<stdio.h>

void	swap(int *a, int *b)
{
	int		tmp;

	tmp = *a;
	*a = *b;
	*b = tmp;
}
int main(void){
  int a=5,b=7;
  printf("before\t a :%d b:%d\n",a,b);
  swap(&a,&b);
  printf("after\t a :%d b:%d",a,b);
}

포인터로 주소를 넘긴다. 

swap(&a,&b) ; 주소를 넘기기 때문에 swap 함수에서 main 함수로 영향을 줄 수 있다. 자동 변수의 한계를 넘는다. 스택에 함수가 있어도 값을 변경할 수 있다. 서로 다른 함수에 있는 자동 변수들은 함수가 사라지면 값도 사라진다. 하지만 포인터 문법을 사용하면 그 한계를 넘을 수 있다. 주소값을 주기 때문에 주소에 해당하는 값을 직접 접근하여 수정할 수 있다. 이것이 바로 포인터다.

아래는 스왑함수 활용 후 표준 출력한 결과 화면이다.

swap 함수 출력 결과

 

Posted by 뭔가느낌이
,

write() 함수 활용하여 0에서 9까지 숫자 출력해보자.

#include <unistd.h>

int	main(void)
{ 

  char a[1]={'0'};  
 
	while (a[0] <= '9'){
		write(1,a,1); 
    a[0]++;
  }
}

간단한 코드다. 문자 배열을 선언한다. '0' 문자로 초기화한다. 반복문으로 '9' 문자까지 출력한다. a [0]++ 구문이 중요하다. 이 구문이 없으면 무한 반복에 들어간다. 마지막에 return을 생략했지만 정상 작동하였다.

write( 표준출력 1,  문자가 있는 버퍼 첫 주소,  문자크기) 형식으로 사용하는 함수다.

 

Posted by 뭔가느낌이
,

putchar() 함수 사용법

putchar('a') ;   라고 입력하면 소문자 a 를 출력할 수 있다.

putchar(variable) ; 변수를 사용하여 출력할 수도 있다.

이것을 응용하면 차례로 출력할 수 있다.

#include <stdio.h>

void	main(void)
{
	char	a_z;

	a_z = 'a';
	while (a_z <= 'z')
		putchar(a_z++);
}

정말 간단한 내용이다. putchar() 함수는 인자 값으로 숫자를 넣어도 출력을 할 수 있다. 숫자는 아스키 값에 대응하는 문자로 변환하여 출력한다. 위에서 putchar(a_z++)  구문이 중요하다. 후위++ 연산이기 때문에 함수가 실행한 다음 1 증가한다. 따라서 함수가 실행한 후 다음 알파벳으로 이동한다. 이동이라는 표현을 사용했는데 다음 알파벳을 지정한다고 말할 수도 있다.

 

Posted by 뭔가느낌이
,