일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- C언어 # 핵심 정리
- MySQL #핵심정리
- C++ 언어 # 핵심 정리
- PHP #핵심정리
- C++ 언어 # 핵심정리
- Hacking #Baic
- C언어 # 부록
- C언어 #부록
- Bandit
- C언어 #핵심정리
- HTML #핵심정리
- C++ 언어 #핵심정리
- shell_script
- Today
- Total
목록C Language Basic (48)
cCcode

1. 2차원 배열 사용하기 - 2 2차원 배열의 요소를 초기화 하는 방법은 다음과 같습니다. 2차원 배열의 요소에 값을 할당하는 방법은 다음과 같습니다. 이처럼 1차원 배열과 2차원 배열은 초기화 하거나 인덱스로 접근하는 등 동일하다고 봐도 될 만큼 유사한 면이 많습니다. 2차원 배열의 크기를 구하는 법은 다음과 같습니다. 그전에 1차원 배열은 단일 포인터에 넣을 수 있다고 말씀드렸죠. 그러면 2차원 배열은 이중포인터에 넣을 수 있지 않을까요? 어라..? 간접 참조 수준이 다르다는 경고가 뜨네요. 실행해보면 numPtr[0][0]의 값이 출력되지 않습니다. 그래서 2차원 배열을 포인터에 담으려면 특별한 방법이 필요합니다. 즉, 포인터를 선언할 때 *(Asterisk)과 포인터명을 괄호로 묶어준 뒤 [ ]..

1. 반복문 사용해 배열의 모든 요소 출력 그전에 배열 요소의 개수를 구한 방법을 이용해서 배열의 모든 요소를 출력해보겠습니다. 이를 활용해 모든 요소들을 역순으로 출력할 수 있습니다. 역순으로 요소를 출력할 때는 배열의 개수 즉, 크기에 - 1 한 값부터 시작해야합니다. 그렇지 않으면 처음부터 배열의 인덱스를 벗어난 상태가 되기 때문에 처음 출력하는 인덱스 값이 쓰레기 값으로 출력되는 불상사가 발생할 수 있으니 주의해주세요. 배열 모든 요소의 합을 구할 때는 이처럼 더한 값을 저장하는 변수를 초기화 해줘야 합니다. 초기화하지 않으면 쓰레기 값이 들어있어 쓰레기 값과 요소의 값이 더해져 잘못된 결과가 출력됩니다. 즉, 값을 누적시키는 연산을 할 때는 항상 변수를 0으로 초기화 해주세요. 다만 제가 쓰는 ..

1. 메모리 사용하기 - 2 malloc 함수로 할당한 메모리에 값을 저장할 때는 포인터를 역참조한 뒤 값을 저장하면 됩니다. 마찬가지로 해당 값을 출력할 때는 포인터를 역참조하여 값을 가져오면 됩니다. 결과만 본다면 아무런 문제가 없어보입니다. 하지만 또 경고를 표시하는 녹색 줄이 보이네요. 저 경고는 [C6011: NULL 포인터 'numPtr'을(를) 역참조하고 있습니다.]라는 경고 입니다. 이 경고가 생긴 이유는 malloc 함수가 항상 성공하는 함수가 아니기 때문입니다. 시스템에 메모리가 부족하거나 메모리 할당 조건이 맞지 않는 경우에 malloc 함수는 NULL을 반환하게 됩니다. 그래서 malloc 함수가 NULL을 반환하는 경우 해당 코드에 오류가 날수 있기 때문에 미리 경고하는 겁니다. ..

1. _msize 함수 사용시 주의점 일단 _msize (heap에 할당된 메모리 크기 구하는) 함수는 visual studio라는 컴파일러에서만 제공하므로 다른 환경에서 사용할 수 없음을 미리 알려드립니다. 전 글에 있던 _msize 함수라는 제목의 사진을 보시면 초록색 밑줄이 있는거 보이시나요? 저 밑줄은 [C6387: numPtr2가 0일 수 있습니다, 이 경우 _msize 함수의 사양과 일치하지 않습니다]라는 경고 때문에 생긴겁니다. 이 경고는 제가 예외처리를 해주지 않아서 발생한거고요. 그럼 빠르게 예외처리한 코드를 보겠습니다. 이처럼 해당 포인터에 NULL 그러니까 아무것도 들어있지 않은 NULL Pointer를 반환하는 경우 goto 구문을 사용해 메모리 해제후 프로그램을 종료하도록 설계했습..

1. void 포인터 사용하기 C언어에서는 자료형이 정해지지 않은 void 포인터가 있습니다. void 포인터는 다음과 같이 void 키워드와 *(Asterisk)를 사용해 선언합니다. ◦ void * 포인터명; 기본적으로 자료형이 다른 포인터끼리 메모리 주소를 저장하면 컴파일 경고와 잘못된 값이 나오게 됩니다. + 경고(warning C4133: '초기화 중': 'short *'과(와) 'int *' 사이의 형식이 호환되지 않습니다.) 발생 결과를 보면 일단 numPtr에 num의 메모리 주소가 제대로 들어가있습니다. 그러면 자료형이 다르다고 해서 메모리주소가 저장되지 않는건 아닙니다. 그리고 역참조 연산자를 통한 num에서 가져온 값의 출력을 보면 알수없는 값이 있네요. 이런 값이 출력되는 이유는 그..

1. 포인터 사용하기 지금까지 값을 저장할 때 변수를 사용했습니다. 그럼 근본적인 의문이 생길텐데요. Q. "과연 변수는 어디서 생성되는 것일까요?" A. "변수는 컴퓨터의 메모리에서 생성됩니다. 즉, 메모리에 일정한 공간을 확보하고 원하는 값을 저장하거나 가져오는 방식이죠." 보통 변수는 num과 같이 변수명을 사용해 표현하지만 방금 말했듯이 변수는 메모리의 특정 공간에 위치해 있기 때문에 메모리 주소로도 표현이 가능합니다. 그래서 변수의 메모리 주소를 구하려면 변수 앞에 &(주소 연산자)를 사용하면 됩니다. 아,, 그리고 메모리 주소는 16진수 형태이기 때문에 %x, %X 서식지정자를 사용합니다. + 물론 서식지정자 %p(pointer의 약어로 p를 사용)를 사용해도 됩니다. 이때 메모리 주소는 고정..

1. switch 분기문 switch 분기문은 전에 설명한 if 분기문처럼 조건을 처리할 수 있습니다. if는 참과 거짓일 때 두가지만 처리할 수 있었죠. 물론 else if 를 사용해 여러 조건을 지정해줄 수 있었지만, 매번 조건식을 지정해줘야 해서 번거로운 면이 없지 않아 있었습니다. 그에 비해 switch 분기문은 조건이 많아도 if 보다 더 간단히 처리할 수 있습니다. switch 분기문은 항상 case와 함꼐 사용하는 데 변수의 값이 case에 지정한 값과 일치한다면 해당 코드를 실행하게 됩니다. 만약 어떤 case에도 해당되지 않는다면 default의 코드를 실행합니다. (default 는 생략할 수 있습니다.) 이처럼 switch 분기문은 형식이 일정하며 처리해야 할 조건이 많은 경우 사용합..

1. 최상위 비트와 최하위 비트 비트에서 첫 번째 비트를 최상위 비트(Most Significant Bit, MSB), 마지막 비트를 최하위 비트(Least Significant Bit, LSB)라고 부릅니다. 부호 있는 자료형의 최상위 비트는 부호비트라고도 불립니다. 이 비트가 1이면 음수, 0이면 양수입니다. flag는 깃발에서 유래한 용어입니다. 깃발을 올리면 on, 내리면 off 를 정수 비트에 활용하면 비트가 1일 경우에는 on, 0일 경우에는 off를 나타냅니다. 즉, 하나의 비트는 말 그대로 1 bit의 크기를 가지고 있습니다. 그래서 int(4byte)는 32개의 상태를 저장할 수 있습니다. flag는 적은 공간에 정보를 저장하고 빠른 속도를 필요로 할 때 사용합니다. ex) CPU • 특..