목록Study (37)
noname02
문자열 변수의 경우 배열의 선언과 동시에 초기화가 가능하다. char[30]="Hello Boy";이렇게 선언과 동시에 초기화가 가능하다. 단, 그 이후에 char="Hello Boy" 등의 조작은 불가능하다.
접미사 자료형 사용 예 u , U unsigned int 304U l , L long 304L ul , UL unsigned long 304UL f , F float 3.15F l , Llong double3.15L
const 키워드는 상수화를 뜻하는데, 이는 값의 변경이 원칙적으로 차단되는 것을 말한다.즉 10=20; 같이 상수의 변경이 불가능한 것처럼, 변수를 상수화시켜 변수의 값 변경을 불가능하게 하는 것이다. 1) 변수의 상수화 const int A=10;- 변수를 선언과 동시에 초기화시켜, 나중에 값을 바꾸지 못하게 한다.- 값이 변하면 안되는 변수가 필요할 때 사용한다. 소스가 짧은 줄이면 딱히 문제 될게 없지만, 소스의 길이가 길어지면 프로그래머의 실수로 바꾸면 안될 값을 바꾸는 것을 방지할 수 있다.- 반드시 선언과 동시에 초기화를 시켜야 하며, 그렇지 않은 경우 컴파일 오류를 발생시킨다.- 메크로 상수와 개념이 비슷하다. 2) 포인터가 가리키는 변수의 상수화 int a = 10;const int* p..
static 변수는 지역변수이면서 전역변수의 성질을 가지고 있다.전역변수의 경우 프로그램 전체에서 접근이 가능한 변수이면서, 초기화가 한 번 이루어지면 다시는 이루어지지 않는다.하지만 전역변수의 사용은 신중해야 하는데, 전역변수를 사용한 뒤 변경해야할 상황이 온다면, 프로그램 전체에 걸쳐서 바꿔야 하는 상황이 발생할 수 있다.static 변수는 지역변수이지만 전역변수와 마찬가지로, 함수의 호출이 끝나도 메모리에 남아있게된다.하지만 static 변수가 선언된 지역에서만 사용가능 하다는 것이 특징이다.static 변수는 전역변수와 마찬가지로 한 번 선언 되면 다시 선언되지 않는다.즉 static int i=1으로 한번 선언되고 i의 값이 변한 뒤 함수가 종료되고 나서 다시 함수의 호출로 i=1로 선언되지 않..
문자 출력 함수#include int putchar(int c);int fputc(int c, FILE* stream); 공통- 오류 발생 시 EOF 리턴. 문자 입력 함수#include int getchar(void);int fgetc(FILE* stream); 공통- 에러, 파일 끝 도달시 EOF 리턴. 문자열 출력 함수#include int puts(const char* s);- 자동으로 줄을 바꿔줌.int fputs(const char* s, FILE* stream);- 자동으로 줄을 바꿔주지 않음. 공통- 오류 발생 시 EOF 리턴. 문자열 입력 함수#include char* gets(char* s);- 리턴값 받는 변수의 크기가 입력받은 값보다 크면 overflow가 되므로 사용하지 않음.ch..
특수 문자 의미 \a 경고음 \b 백스페이스 \f 폼 피드 \n 엔터 \r 캐리지 리턴 \t 수평 탭 \v 수직 탭 \\ 백 슬래시 \' 작은 따옴표 \"큰 따옴표서식 문자의미%c단일 문자%d부호有 10진 정수%i==%d %f부호有 10진 실수%s문자열 %o부호無 8진 정수 %u부호無 10진 정수%x부호無 16진 정수(小)%X부호無 16진 정수(大) %ee 표기법 실수%EE 표기법 실수%g소숫점 자리에 따라 %f 혹은 %e(E)로 표기%G%%%기호 출력 %8d(f) 8칸 확보, 오른쪽 정렬%-8d(f)8칸 확보, 왼쪽 정렬%+8d(f)8칸 확보, 오른쪽 정렬, 부호표기%08d(f)8칸 확보, 남은칸 0으로 채움%.3d3자리만 출력%.3f소수점 3자리만 출력
int main(int argc, char** argv) int argc- 프로그램을 부를 때 전달된 문자열의 갯수 char** argv- argv[0] : 프로그램의 이름 문자열 상수포인터- argv[1~n] : 나머지 전달된 문자열 상수포인터 main함수의 인자는 도스환경에서 쓰이는데,도스 환경에서 프로그램을 실행하는 경우 C:\>프로그램의_이름 의 형태로 실행시킨다. 그런데 main함수에 인자를 받게 된다면 C:\>프로그램의_이름 인자1 인자2 .... 의 형태로 스페이스를 기준으로 인자를 전달받게 되는데 이 경우int argc의 값은 3이 되고, argv 더블포인터 배열은 3개가 생성된다.즉 argc는 최소값이 1이며, argv 더블포인터 배열은 최소 1개(프로그램의 이름)를 갖게 된다.
버퍼 관련#include fflush(stdin);- 입력 버퍼를 비움fflush(stdout);- 출력 버퍼를 비움 입출력 관련 #include int fputc(int c, FILE* stream);- 문자 출력int fgetc(FILE* stream);- 문자 입력int fputs(const char* s, FILE* stream);- 문자열 출력char* fgets(char* s, int n, FILE* stream);- 문자열 입력int fprintf(FILE* stream, const char* format, ...);- 형식지정 문자열 출력int fscanf(FILE* steam, const char* format, ...);- 형식지정 문자열 입력 EOF #include int feof(F..
여러개의 헤더 파일을 전처리하는 경우, 중복되는 경우가 발생할 수 있다.이 때 #pragma once와 #ifndef ~ #endif 를 사용하게 되는데초기에는 #ifndef XX #define XX ~~~~~ #endif 구문을 사용하였다.~~~~~부분에 헤더에 들어갈 내용을 적어두면, 컴파일 과정에서 중복으로 선언하는 경우가 사라지기 때문이다.그리고 이렇게 쓰이는 것을 간단하게 한 내용이 #pragma once이다.그러면 #pragma once를 사용하면 끝일 것 같은데, #ifndef ~ #endif 구문을 사용하는 이유는컴파일러에 따라서 #pragma once를 인식하지 못하는 컴파일러도 존재할 수 있기 때문이란다.요즘엔 그럴 경우는 거의 없다는데..
조건 ? A : B; 조건이 true인 경우 A를 반환, false인 경우 B를 반환한다.생각해보면 함수는 일종의 연산자라고 볼 수 있는 것 같다.인자를 받아서 작업 후 값을 반환하는 것인데, 연산자가 바로 그러한 것 아니겠는가?이 삼항연산자라는 이름이 붙은 이유는 항목이 3항으로 이루어져있기 때문이다.조건, A, B 이렇게 3개로.조건식에는 괄호가 없어도 되지만, 가독성을 위해 괄호를 넣는것이 좋을 것 같다.
123456789101112131415#include #define PLUS(a,b,c) printf(#a "+" #b "+" #c "= %d\n",a+b+c)#define TIMES(a,b,c) printf(#a "*" #b "*" #c "= %d\n",a*b*c) int main(void){ int a,b,c; printf("정수 3개 입력: "); scanf_s("%d %d %d",&a,&b,&c); PLUS(a,b,c); TIMES(a,b,c); return 0;}Colored by Color Scriptercs 예상으로는 1+2+3= 6, 1*2*3=6 이렇게 출력되어야 하지만, 실제로는 그렇지 않았다.#define 선언은 단순 치환인데, 여기서 대체되는 영역에 들어가있는 #(문자열로 인식)은 ..