함수를 이용해서 iNum1의 값과 iNum2의 값을 바꿔보자.

#include

void Swap(int n1, int n2);

int main()

{

int iNum1 = 10;

int iNum2 = 20;

Swap(iNum1,iNum2);

return 0;

}

void Swap(int n1, int n2)

{

int temp;      //임시로 공간(변수)하나 주자

temp= n1;    //temp에 10이 들어간다.

n1  = n2;    //n1에 20이 들어간다. 그러면 n1 == 20

n2  = temp; //n1에 값이 temp에 있었지요? 그렇죠? n2 == 10


printf("%d %d", n1, n2); //n1이 20 n2가 10이 되었다.



}


하지만 Main함수에서 iNum1값과 iNum2값이 바뀌었나요? 아니죠.

하지만 메모리 주소로 직접들어가면 바꿀수 있죠? 대마법사 포인터를 불러봅시다.

안녕 망할포인터야.!! 바꿔주세요다사이.

#include <stdio.h>

void Swap(int *n1, int *n2);


int main()

{

int iNum1 = 10;

int iNum2 = 20;

Swap(&iNum1, &iNum2);

printf("iNum1:%d iNum2:%d", iNum1, iNum2);


return 0;

}

void Swap(int *n1, int *n2)

{

int temp;

temp = *n1; //temp에 n1이 가리키는 값10들어갑니다.

*n1  = *n2; //n1  에 n2가 가리키는 값20들어갑니다.

*n2  = temp; //n2  에 temp(n1)      값10들어갑니다.

//참쉽죠!!

}



scanf를 이용한 배열선언

#include <stdio.h>

int main()

{

char str[50]; //50까지 배열을 선언함

int idx=0; //[idx]를 하기 위한 선언


printf("문자열입력하시오:");

scanf("%s", str);

printf("입력 받은 문자열: %s \n", str);//scanf에는 null값이 찍히니까 알아서 해준다.


printf("문자 단위 출력: ");       

while(str[idx] != '\0') //하나씩 str[0]에서부터 [50]까지 찍어준다.

{ //'\0' null값이 찍히면 반복문 종료. 

printf("%c", str[idx]);

idx++;

}

printf("\n");

return 0;

}

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

20140331 이중포인터  (0) 2014.03.31
20140327 포인터와 배열  (0) 2014.03.27
20140324 지역변수 전역변수 & 배열  (0) 2014.03.24
20140321 함수(1)  (0) 2014.03.21
20140320 포인터의 기초  (0) 2014.03.20
by 날라차숑 2014. 3. 26. 17:02

전역변수와 동일한 이름의 지역변수가 선언되면?
#include
 <stdio.h>

int Add(int val);
int iNum = 1;    //전역변수

int main()
{
  int iNum = 5;  //지역변수
  printf("iNum: %d\n", Add(3));    
  printf("iNum: %d\n", iNum+9);


  return 0;
}

int Add(int val)
{
  int iNum = 9;
  iNum = iNum+val;
  return iNum;
}
//main의 iNum과 Add의 iNum은 다르다.




지역변수 전역변수로 답을 유추해보자.

#include <stdio.h>

void Test(void);


int main()
{
  Test();
  Test();
  Test();
  
  return 0;
}
void Test(void)
{
  int iNum1 = 0;  //STACK
  static  int iNum2;  //BSS
  int iNum3 = 0;  //STACK
  static  int iNum4;  //BSS
  int iNum5 = 0;  //STACK
  static  int iNum6 = 10;  //DATA
  int iNum7 = 0;  //STACK
  static  int iNum8 = 20;  //DATA
  int iNum9 = 0;  //STACK

  printf("iNum1 : %08X \n"&iNum1);
  printf("iNum2 : %08X \n"&iNum2);
  printf("iNum3 : %08X \n"&iNum3);
  printf("iNum4 : %08X \n"&iNum4);
  printf("iNum5 : %08X \n"&iNum5);
  printf("iNum6 : %08X \n"&iNum6);
  printf("iNum7 : %08X \n"&iNum7);
  printf("iNum8 : %08X \n"&iNum8);
  printf("iNum9 : %08X \n"&iNum9);
  
  ++iNum1;
  ++iNum2;
  ++iNum3;
  ++iNum4;
  ++iNum5;
  ++iNum6;
  ++iNum7;
  ++iNum8;
  ++iNum9;

  printf("iNum1 : %d \n", iNum1);
  printf("iNum2 : %d \n", iNum2);
  printf("iNum3 : %d \n", iNum3);
  printf("iNum4 : %d \n", iNum4);
  printf("iNum5 : %d \n", iNum5);
  printf("iNum6 : %d \n", iNum6);
  printf("iNum7 : %d \n", iNum7);
  printf("iNum8 : %d \n", iNum8);
  printf("iNum9 : %d \n", iNum9);

}




아래의 주석문을 배열로 바꿔써보자.
/*#include <stdio.h>

int main()
{
  int iNum1 = 1;
  int iNum2 = 2;
  int iNum3 = 3;
  int iNum4 = 4;
  int iNum5 = 5;
  int iNum6 = 6;
  int iNum7 = 7;
  int iNum8 = 8;
  int iNum9 = 9;

  printf("iNum1 = %d \n", iNum1);
  printf("iNum2 = %d \n", iNum2);
  printf("iNum3 = %d \n", iNum3);
  printf("iNum4 = %d \n", iNum4);
  printf("iNum5 = %d \n", iNum5);
  printf("iNum6 = %d \n", iNum6);
  printf("iNum7 = %d \n", iNum7);
  printf("iNum8 = %d \n", iNum8);
  printf("iNum9 = %d \n", iNum9);


  return 0;
}
*/


#include <stdio.h>

int main()
{
  int iNum[9];
  int iCnt;
  
  for(iCnt=09>iCnt; ++iCnt)
  {
    iNum[iCnt] = iCnt;    //0번방에0을집어넣어라~8번방에8을집어넣어라
  }
  
  for(iCnt=09>iCnt; ++iCnt)
  {
    printf("%d \n", iNum[iCnt]);  //0번방에는0~8번방에는8 확인
  }

  return 0;
}





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

20140327 포인터와 배열  (0) 2014.03.27
20140326 포인터와 배열  (0) 2014.03.26
20140321 함수(1)  (0) 2014.03.21
20140320 포인터의 기초  (0) 2014.03.20
20140318 포인터의 이해  (0) 2014.03.18
by 날라차숑 2014. 3. 24. 17:19

함수의 기초
#include
 <stdio.h>

/*int Add(int num1, int num2) //;만 있으면 원형 { }가 있으면 정의
{
  int result = num1 + num2;
  return result; //num1이랑 num2더한값을 돌려주세요.
} //실행이 끝나면 죽음
*/
 
//위에서 함수 선언 정의를 다하는경우
int Add(int num1, int num2);
int main()
{
  
  int iNum;
  iNum =  Add(30,20); //Add영역으로 점프   
  printf("%d\n", iNum);
  return 0;
}
//위에서 함수를 선언해놓고 밑에서 정의를 해놓는 경우.

{
  int result = num1 + num2;
  return result; 



덧셈프로그램
#include <stdio.h>

int Add(int num1, int num2) //반환있음 인자 있음
{
  return num1 + num2;
}
void ShowAddResult(int num) //반환 없음 인자 있음
{
  printf("덧셈결과 출력: %d \n", num);
}
int ReadNum(void)      //인자 없음 반환 있음
{
  int num;
  scanf("%d"&num);
  return num;
}
void HowToUseThisProg(void//인자 없음 반환 없음
{
  printf("두 개의 정수를 입력하시면 덧셈결과가 출력됩니다. \n");
  printf("자! 그럼 두 개의 정수를 입력하세요.\n");
}
int main()
{
  int result;
  int num1;
  int num2;
  HowToUseThisProg();
  num1=ReadNum();
  num2=ReadNum();
  result = Add(num1, num2);
  ShowAddResult(result);
    
  return 0;  

  
}


위와 똑같이 곱셈 소스를 만들어보자.

#include <stdio.h>
int Mul(int num1, int num2)
{
  return num1*num2;
}
int inPut(void)
{
  int num;
  scanf("%d"&num);
  return num;
}
showresult(int num)
{
  printf("결과는 %d입니다\n", num);

}
showprint(void)
{
  printf("곱셈프로그램입니다.\n");
  printf("두개의 수를입력하세요.\n");

}


int main()
{
  int num1;
  int num2;
  int result;
  showprint();
  num1 = inPut();
  num2 = inPut();
  result = Mul(num1,num2);
  showresult(result);
  return 0;

}


절대값이 큰 정수 출력하기
#include <stdio.h>

int AbsoCompare(int num1, int num2);
int GetAbsoValue(int num);
int main()
{
  int num1;
  int num2;
  printf("두 개의 정수 입력: ");
  scanf("%d %d"&num1, &num2);
  printf("%d와 %d중 절댓값이 큰 정수: %d \n"
    num1, num2, AbsoCompare(num1, num2));
  return 0;
}

int AbsoCompare(int num1, int num2)
{
  if(GetAbsoValue(num1) > GetAbsoValue(num2))
    return num1;
  else
    return num2;
}

int GetAbsoValue(int num)
{
  if(num<0)
    return num * (-1);
  else
    return num;
}



세정수를 입력받아 가장큰수와 작은수 구하기
#include <stdio.h>
int iCompare(int num1, int num2, int num3) //큰수 비교함수
{
  if(num1>num2 && num1>num3)
    return num1;
    
  else if(num2>num1 && num2>num3)
    return num2;
    
  else 
    return num3;
}
int iCompare2(int num1, int num2, int num3) //작은수 비교함수
{
  if(num1<num2 && num1<num3)
    return num1;

  else if(num2<num1 && num2<num3)  
    return num2;
  else 
    return num3;
}  
int myscanf(void)         //숫자 입력함수
{
  int num;
  scanf("%d"&num);
  return num;

}
  


int main()
{
  int iNum1;
  int iNum2;
  int iNum3;
  int result1;  
  int result2;

  iNum1 = myscanf();   
  iNum2 = myscanf();
  iNum3 = myscanf();
  
  result1=iCompare(iNum1,iNum2,iNum3);
  result2=iCompare2(iNum1,iNum2,iNum3);
  

  printf("가장 작은 큰수는 %d 작은수는%d입니다.\n", result1 , result2);

  return 0;
}


지역변수
#include <stdio.h>



int main()
{
  int cnt;
  for(cnt=04>cnt; cnt++)
  {
    int num = 0;
    num++;
  printf("%d번째 반복, 지역변수 num은 %d. \n", cnt+1, num);
  }
  
  if(cnt==3)
  {
    int num = 7;
    num++;
    printf("if문 내에 존재하는 지역변수 num은 %d. \n", num);
  }
  printf("%d", cnt);
  return 0;
}


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

20140326 포인터와 배열  (0) 2014.03.26
20140324 지역변수 전역변수 & 배열  (0) 2014.03.24
20140320 포인터의 기초  (0) 2014.03.20
20140318 포인터의 이해  (0) 2014.03.18
20140317 break & continue & switch  (0) 2014.03.17
by 날라차숑 2014. 3. 21. 17:22