본문 바로가기

C언어

C언어_실수형 데이터 출력 테스트 int main(int argc, char **argv){ float num_f = 123.456789123456789; double num_d = 123.456789123456789; fprintf(stdout, "num1 : %.20f\nnum2: %.20f\n", num_f, num_d); } [결과 분석] IEEE 754 표준에 따르면 Float Type Data(32-bit single-precision)은 exponent 표현에 8bits / fraction 표현에 23bits를 이용하며 Float Type Data(32-bit single-precision)은 exponent 표현에 11bits / fraction 표현에 52bits를 이용한다. 123.456789123456789(10) 를.. 더보기
C언어_매크로함수 #define DEBUG2 int main(int argc, char **argv){ int num = 2; #ifdef DEBUG2 fprintf(stdout, "Debuging... num address: %p\n", &num); #endif fprintf(stdout, "num: %d\n", num); } [결과 분석] (원본 코드) (#define DEBUG2 주석처리시) DEBUG2가 정의되어 있으면 다음과 같이 num2의 address를 출력하는 문장이 출력되고, 정의가 되어있지 않는 경우, 출력이 안되는 것을 확인할 수 있었다. 더보기
C언어_Const C언어에서 포인터를 사용해야하는 곳 1. 함수의 출력을 원할 때 2. 함수에 대용량 데이터를 전달할 때 3. malloc void func(int *const data1, const int *data2, const int * const data3, const int data4, int data5, int *data6){ *data1 = data5; //data1 = &data5; //*data2 = data5; data2 = &data5; //*data3 = data5; //data3 = &data5; //data4 = data5; } int main(int argc, char ** argv){ int a=1, b=2, c=3, d=4, e=5, f=6; func(&a, &b, &c, d, e, &f);.. 더보기
C언어_Static > main2.cpp int global_num = 100; > main.cpp static int global_num = 0; void normal_num(){ int num = 0; fprintf(stdout, "num: %d\n", num++); } void static_num(){ static int s_num = 0; fprintf(stdout, "num: %d\n", s_num++); } int main(int argc, char ** argv){ puts("int var"); for(int i=0;i 더보기
C언어_포인터와 주소값 #include #include int main(int argc, char* argv[]) { int a = 0x12345678; int *ptr = &a; puts("\n Test 1. ==========================="); fprintf(stdout, "Data of %10s: %8x\n", "int ptr", *ptr); fprintf(stdout, "Data of %10s: %8x\n", "short ptr", *(short *)ptr); fprintf(stdout, "Data of %10s: %8x\n", "char ptr", *(char *)ptr); puts("\n Test 2. ==========================="); char *dy_chptr = (char .. 더보기
C언어_fprintf, put을 쓰는 이유 더보기
C언어_ 포인터 변수와 배열의 이름, 문자열을 함수의 매개변수로 전달 C언어에서는 문자열을 처리할 떄 배열 또는 포인터를 사용합니다. char* a = 'abc' char a[] = 'abc' 포인터 변수와 배열의 이름 이 둘은 거의 같다고 보아도 무방합니다. 하지만 다른점은 주소 값의 변경이 배열이 불가능하다는 점에 있습니다. 그렇기 때문에 배열은 포인터 상수라고도 불립니다. 그러면 const를 포인터 변수 앞에 붙여주게 되면 둘의 뜻하는 바가 같아집니다. char* a는 문자열의 첫 번째 주소를 나타냅니다. char a[] 배열로 설명을 하자면 문자열의 상수가 저장된 첫 번째 번지수를 나타냅니다. 만약 함수의 매개변수를 "abc" 로 넘기고 싶다면 어떻게 하면 될까요? #include #include void print1(const char *str){ printf(".. 더보기