본문 바로가기

프로그래밍/C언어22

가변 인수 printf나 scanf를 보면 함수지만 보내지는 인자값이 매번 틀리다는걸 알 수 있다. 그렇다면 어떻게 그게 가능한 것인가? 가변 인수에 대해서 알아보자 #include #include void printChar( int n1, ... );// ... 이 부분이 가변 인수를 생성한다. void main() { printChar(3, 'A','B','C'); printChar(4, 'A','B','C','D'); printChar(5, 'A','B','C','D','E');// 실행 예 } void printChar( int n1, ... ) { va_list varl;// va_list 타입의 변수 생성(무조건) char str[6];// 실제로는 동적 할당을 해서 써야겠지만, int i; va_sta.. 2010. 3. 8.
문자열과 배열 사실 이 부분은 크게 중요하진 않지만 언제 어떻게 쓰일지 모르는게 배열과 문자열인것 같다. 특별한 건 없고 포인터 변수를 사용하여 문자열을 저장하는 것과, strlen을 사용하지 않고, 배열의 사이즈를 파악, 생성 하는 것과 간단한 출력 방법을 코딩하였다. #include void main() { char t1[] = "Test1"; char t2[] = "Test2"; char t3[] = "test3"; char *str[3] = { t1, t2, t3 }; char t4[] = {"Hello World!"}; const int size = sizeof(t4); char t5[size]; printf( "%s\n", *str ); printf( "%s\n", (*str)+2 ); printf( "%s.. 2010. 3. 8.
재귀 호출 재귀 호출의 기본적인 룰은 아주 간단하다 함수안에서 다시 함수를 호출 하는 것! 하지만 내가 나를 부른 다는 점에서 자칫 하면 무한 루프로 돌 수 있는 약간은 위험한 알고리즘. #include int sum(int a); void main() { printf( "%d\n", sum(0)); } int sum(int a) { if( a < 10 ) return a+sum(a+1); return a; } 단순히 1~10까지의 합을 구하는 소스. 특별할건 없고. 그냥 자주 쓸일이 없으니 이정도로 넘어가자. 2010. 3. 8.
bit연산자 - & | ^ << >> (3) &(and)연산자 두 비트를 비교하여 둘다 참이 아니면 무조건 0. 마찬가지로 &연산자를 사용해서도 가능한 응용법. #include void main() { unsigned int bit = 0x12345678; int chk_bit[4] = { {0x000000ff}, {0x0000ff00}, {0x00ff0000}, {0xff000000}}; unsigned char out_bit[4] = {0}; printf( "%x\n", bit ); out_bit[0] = bit & chk_bit[0]; printf( "%x \n", out_bit[0] ); out_bit[1] = (bit & chk_bit[1]) >> 8; printf( "%x \n", out_bit[1] ); out_bit[2] = (bit.. 2010. 3. 8.
bit연산자 - & | ^ << >> (2) > 연산자에 대해서 살펴 보자. 4비트의 0001(1)를 >할 경우 0001(1)이 되는 것은 기본적인 것이라 소스코드는 패스. 시프트연산자를 사용하면 좀더 재밋는 일을 할 수 있는데 #include void main() { bool flag[4]; char bit=0; flag[0] = true; flag[1] = true; flag[2] = true; flag[3] = true; if( flag[0] ) printf( "첫번째 상태\n" ); if( flag[1] ) printf( "두번째 상태\n" ); if( flag[2] ) printf( "세번째 상태\n" ); if( flag[3] ) printf( "네번째 상태\n" ); printf( "\n\n" ); bit = 1; bit = bit |.. 2010. 3. 8.
bit연산자 - & | ^ << >> (1) 비트 연산자에 대해서, 비트 연산자는 &(and), I(or), ^(xor), (shift)연산자가 존재한다. 먼저 가장 ^(xor)에 대해서 살펴 보자. #include void main() { int val3 = 127; int key = 112; int val = 35; int val2 = 35; int x = 5; int y = 10; // xor를 사용한 값 변환 printf( "%d\n", val ); val ^= val; printf( "%d\n", val ); val ^= val2; printf( "%d\n", val ); // 간단한 암호화 printf( "%d\n", val3 ); val3 ^= key; printf( "%d\n", val3 ); val3 ^= key; printf( ".. 2010. 3. 8.