묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 시작하는 C 프로그래밍
엔디안에 대해 문의드립니다.
강의에서 문자열의 경우, 메모리를 확인했을 때 문자열의 순서에 따라서 바이너리가 정렬된 것을 알 수 있었습니다. 근데 int로 선언된 16진수 데이터의 경우는 역순으로 채워진다는 개념을 들으니 혼동이 옵니다. 혹시 문자, 문자열의 경우는 정배열이고 숫자 데이터의 경우는 역배열이다 라고 생각하면 될까요?
-
해결됨독하게 시작하는 C 프로그래밍
static 변수에 관해서 질문이 있습니다.
int TestFunc(){ static int a = 10; ++a; return a; } int main(){ printf("%d\n",TestFunc()); printf("%d\n",TestFunc()); printf("%d\n",TestFunc()); }위 예제에서의 질문입니다. 1. Compile시에 정적영역이 결정되는 건가요?질문이유 : a의 주소에 코드가 실행되지 않았음에도 이미 10이라는 값이 들어가있어서 질문을 드립니다. 2. TestFunc()이 실행될 때 static int a = 10가 매번 평가되는게 아닌건가요? 질문이유 : 제 생각으로는 정적영역에 있더라도, 할당 연산자 때문에 10을 매번 넣어서, 출력값이 11 ,11 ,11이 될거라고 생각했습니다.
-
해결됨독하게 시작하는 C 프로그래밍
실행과 참조의 개념에 대한 질문
양질의 강의에 진심으로 감사의 말씀 드립니다.다름이 아니라 제가 참조에 대해서 계속 고민하다가 개념적인 이해를 시도하는데 이것이 맞는 것인지 확인하고자 강사님께 질의를 남깁니다. 직접참조 : 메모리 주소로 접근해서 바이너리 확인- 메모리 주소 : 포인터(값을 가리키지 않고 주소를 나타냄)- 그 메모리 주소의 값 : 비트로 구성된 메모리의 값- 변수 : 메모리가 값을 위해 할당한 데이터 공간(값이 들어갈 수 있는 일종의 space) 간접참조 : 메모리 주소의 주소- 즉, 포인터의 포인터- 그래서 간접참조된 메모리 주소에는 값이 들어있지 않고 그 값을 가리키는 포인터(메모리 주소)가 들어있다. "가장 큰 차이는 직접참조는 메모리 공간에 쓰인 바이너리가 있는 것. 간접참조는 주소에 관련된 정보 바이너리가 있기 때문에(직접참조는 메모리 주소 - 값, 간접참조는 메모리주소 - 메모리 주소) 일종의 파이프-라인. 따라서 같은 15라는 값을 나타내도 직접참조는 그 메모리 주소의 값 그 자체를 나타내고, 간접참조는 그 주소에 대한 정보 바이너리가 적혀있다. "제가 계속 고민을 하다 이런식으로 좀 개념을 잡았는데 제대로 잡고 있는 것인지 궁금합니다. 감사합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
05_adtFileIO 질문있어요.
search -> edit -> save 중 save에 궁금한 게 있습니다.int SaveNodeToFile(MYNODE* pNode)를 보면파일에서 불러낸 경우만 고려돼있습니다.신규 데이터를 찾아서 수정하는 경우에는 저장하지 않고 프로그램 종료 시 신규 데이터 일괄로 저장하는 방법을 써야할까요? pNode->bNew 값을 따져서 신규인지 구분하고 ab+모드로 파일 끝에 저장하는 건 생각했는데파일에 저장했으니 bNew를 false로 수정해야하나?수정하면 offset이 0이라 다시 검색할 때 offset이 0인 데이터를 찾을텐데? 그럼 offset 값은 어떻게 주지? bNew 값을 true로 저장하고 신규 데이터 일괄 저장할 때 덮어 써야하나? 라는 고민에 빠졌습니다. 어떤 방법이 좋을까요?
-
해결됨윤파고의 정보처리기사 DB/프로그래밍 All-In-One
dbms의 기출문제를 보고싶습니다.
혹시 기출문제 올인원은 어디서 볼 수 있나요?
-
해결됨독하게 시작하는 C 프로그래밍
최대값구하기 서바이벌
부호있는정수이므로 max의초기값을 0x 80 00 00 00으로해야 맞는게 아닌지... 하는생각이듭니다
-
해결됨독하게 시작하는 C 프로그래밍
비트연산자 뺄셈 구현에서 질문이 있습니다.
안녕하세요 선생님!선생님 덕분에 재미있게 C를 공부하고 있습니다. 감사합니다.다름이 아니고 비트연산자로 뺄셈을 구현할 때 약간 이해가 안 가는 점이 있어 질문을 드립니다. int a = 9, b = 6; printf("%d\n", a + (~b + 1)); // 1001 + 1010 = 10011 ....??? return 0;10진수 9에서 10진수 6을 빼는 연산에서6을 2진수로 치환한 후 부정을 걸어 1의 보수로 만들고 1을 더하면 1010이 되는 것으로 알고 있습니다.여기에 10진수 9를 2진수로 치환한 1001을 더하면 10011이 됩니다.그럼 답이 19가 되어야 하지 않을까 생각이 듭니다. 자리올림을 소거하면 0011로 3이 맞지만그걸 따로 코딩을 안해준 상태에서는 19가 나와야하지 않나요?혹시 C에서 자리올림을 알아서 소거해주는 걸까요? 아니면 제가 계산을 잘 못하고 있는 걸까요? 답변 주시면 너무 감사하겠습니다!
-
해결됨독하게 시작하는 C 프로그래밍
continue문 질문입니다
#include <stdio.h>int main(void){ char ch; while (1) { ch = getchar(); if (ch == 'x') break; if (ch == 'q') continue; putchar(ch); } return 0;}이 예제에서 한 문자를 입력받을 때마다 while문이 실행되며 x인지 q인지를 검사하는 것으로 알고 있습니다. 만약에 aaaq를 입력하고 엔터를 누르지 않앗다면 q를 입력하는 순간 컨티뉴 문이 작동하여 putchar을 실행 시켜야 한다고 생각하는데 엔터를 눌러야만 작동하는 것이 이해가 안됩니다 ㅜㅜ 또한 getchar 함수는 한 글자씩 입력을 받는데 제가 if(ch == zxc) break;를 추가하고 zxc를 입력 후 엔터를 치면 브레이크 문이 작동 됩니다. 정리하자면 q나 x를 입력하는 순간에 브레이크나 컨티뉴 문이 작동 해야 하는게 아닌가요? 왜 엔터를 쳐야 작동하는지 모르겠습니다. 또한 getchar함수는 한글자만 입력받는 것으로 알고 있는데 왜 문자열로도 작동이 될까요?
-
해결됨독하게 시작하는 C 프로그래밍
독하게 시작하는 C 프로그래밍 책 관련 문의
문제가 된다면 질문은 바로 삭제하겠습니다. 다름이 아니옵고, 책을 구매하고 싶은데 절판이라 너무 아쉽습니다. 혹시 재발간 계획은 없으신지..구할 수 있다면 어디인지 궁금합니다🙏
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
3-3 for 반복문 ++i 일때 질문입니다.
for (int i = 0; i < 10; ++i) { printf("hello world %d\n", i);} 이렇게 코드를 변형해봤습니다.i == 0 인 상태에서반복문 첫번째 실행시 i == 1 이 되어 1부터 실행될거라 생각했습니다.그런데 0부터 시작합니다. 왜인지 이해되지 않습니다 ㅠㅠ
-
해결됨CUDA 프로그래밍 (4) - C/C++/GPU 병렬 컴퓨팅 - 행렬 matrix 곱하기
소스 코드 에러 문의 드립니다
소스코드 그대로 돌리면, 아래와 같은 에러가 발생합니다. (25장 전체 소스가 모두 동일합니다) 이유와 수정 방법을 알고 싶읍니다. // 25d-gemm-alignedTile.cu/tmp/tmpg97edtlu/25d-gemm-alignedTile.cu(98): error: "beta" is ambiguous 1 error detected in the compilation of "/tmp/25d-gemm-alignedTile.cu".
-
미해결홍정모의 따라하며 배우는 C언어
const int angel = 1004;에서 변수였던 angel이 기호적 상수가 되면
const int angel = 1004;에서 변수였던 angel이 const를 붙임으로써 기호적 상수(symbolic constant)가 되면 rename으로 다른 부분에 써놓았던 angel을 전부다 변화시키면 그래도 오류가 나나요? const를 붙인 자료형에서 상수를 바꾸면 오류가 난다고 봤었는데, 변수였던 angel도 고치면 오류가 나나요? 그러니까 angel이라는 이름을 못바꾸는건가요? 아니면 angel에 대입하는 1004라는 숫자를 못바꾸는건가요? 아니면 둘다 못바꾸는건가요?
-
해결됨홍정모의 따라하며 배우는 C언어
8.5강 2분 38초 관련해서 질문이 있습니다.
입력 "A 3 3 "에 대해입력 버퍼에 저장된 값은 "A 3 3 \n"이며"A 3 3" 까지만 읽고AAAAAAAAA를 출력한다는 것은 알겠습니다. 그 다음 입력 "B 1 2 "에 대해입력 버퍼에 " \n"이 남아있으므로입력 버퍼에 저장된 값은 " \nB 1 2\n"이며입력 버퍼에서 개행 문자(\n) 앞의 공백(" ")만 읽어오고나머지 rows나 cols는 이전에 저장된 값을 재사용해서3개씩 3줄의 공백을 출력하는 것 같습니다. 여기서 궁금한 점이..scanf의 첫 번째 인수로 공백(" ")을 읽고 나머지 rows와 cols는 읽지 못했는데 왜 그대로 진행되어 9개의 공백(붉은색 부분)이 출력되는건가요?? 링크의 문서에는 입력 스트림에 저장된 값이 형식 지정자와 다를 경우 scanf를 종료한다고 되어있습니다. 그러면 첫 번째 인수로 공백(" ")을 읽고 한 줄에 3개씩 3줄의 공백(" ")를 출력하고 난 뒤에는개행 문자 ("\n")를 읽어서 9개의 줄 바꿈이 출력되어야 할 것 같은데왜 바로 BB가 출력되었는지 잘 모르겠습니다.. [입력과 그에 대한 예상 출력 콘솔 화면] A 3 3 // 첫 번째 입력 : A 3 3 AAA AAA AAA // 한 줄당 3개의 'A'를 3줄 출력 B 1 2 // 두 번째 입력 : B 1 2 // 한 줄당 3개의 공백을 3줄 출력 // 9번 + 3번 총 12번의 줄바꿈 BBhttps://learn.microsoft.com/en-us/cpp/c-runtime-library/format-specification-fields-scanf-and-wscanf-functions?view=msvc-170 scanf를 실행시켜서 입력 버퍼의 값을 읽고 각각의 인수에 저장한 후에는 입력 버퍼에서 읽은 값을 제거하나요? 아니면 getchar처럼 스트림의 위치를 마지막으로 읽었던 값의 다음 위치로 이동시키나요?? 첫 번째 입력이 "A 3 3"이고 두 번째 입력이 두 번째 입력이 "B 1 2"일 때첫 번째 출력을 한 후 입력 버퍼에 저장된 값이 "\nB 1 2\n"인데scanf가 첫 번째 \n만 읽어서 12번 줄 바꿈 출력 후 종료되는건가요? 계속 구글링 해보고 있지만 답을 찾지 못해서 질문드립니다..
-
해결됨독하게 시작하는 C 프로그래밍
Lookup 배열과 STL MAP 과의 비교
안녕하세요오늘도 잘 듣고 있습니다 Lookup 배열에 대해 보다 보니 stl의 map과 같다는 생각이 들게 되는데요 실제로 lookup 배열과 map 두 자료 구조 형태의 성능에 대한 차이가 궁금하네요 어떤 방식이 더 효율적인지 알고 싶습니다lookup의 경우 index(?) 라고 해야 하나요? ^^ 그런 구성을 사용자가 직접 신경을 써서 정해야 할 것 같지만 이 부분을 제외하면 성능만으로 봤을 때 어느 방식이 더 좋은지 궁금합니다
-
해결됨독하게 시작하는 C 프로그래밍
비트연산을 이용한 뺄셈
비트연산을 사용한 뺄셈에서 a b라고 사용자에게 입력받을 변수 선언하고 (~b+1)+a; 라고 하면 캐리를 고려하지 않은 오류가 발생하지 않나요? 음수간의 뺄셈에서도 오류가 발생할 구간이 있을 것 같은데 설명 부탁드리겠습니다 ㅠㅠ
-
해결됨독하게 시작하는 C 프로그래밍
필수실습문제 MyStrcpy() 함수 작성하기 에서 질문있습니다.
필수실습문제 MyStrcpy() 함수 작성하기 에서void MyStrcpy(char* pszDst, int nSize, char* pszSrc) { size_t nLenSrc = 0; nLenSrc = strlen(pszSrc); for (int i = 0; i < nLenSrc; ++i) pszDst[i] = pszSrc[i]; }로 함수를 정의하셨는데 이럴경우에 매개변수로 들어간 nSize는 함수에서 어떤 의미가 있는건가요...?
-
해결됨독하게 시작하는 C 프로그래밍
정수와 실수 출력에 관하여...
#include <stdio.h> int main(void) { int fee=1000; printf("%d\n", fee * 0.75); int fee2 = 1000 * 0.75; printf("%d", fee2); return 0; }섹션 11의 버스요금 계산 문제를 풀면서 궁금한 점이 생겼습니다. 예제를 작성할때 첫번째 방법으로 풀었더니 출력이 0이 나와서 두번째 방법으로 해보니 정상적으로 750이 출력되었습니다. 이 두 가지 방법의 차이점이 무엇인가요?
-
해결됨독하게 되새기는 C 프로그래밍
함수호출이랑 쓰레드
안녕하세요. 배운 내용을 한번 확인 및 함수호출과 쓰레드의 관계에 대해서 질문 드립니다! main함수에서 다른 함수를 호출할 때는 쓰레드가 생성되는게 아니고 하나의 main 쓰레드가 끝날때까지 진행 되는건가요?그리고 그 실행된 메인 쓰레드는 호출 된 함수로 이동하여 계산 또는 값을 수정 등을 하고 다시 반환하여 메인 함수로 가는 건가요? 만약 동시에(싱글코어로 가정하면) 이러한 실행을 하기 위해서는 쓰레드를 추가하는 것이라고 이해하면 될까요? 싱글코어로 가정한 쓰레드들은 OS가 동기화를 통해 쓰레드들간에 진행을 통제 하는건가요?
-
해결됨독하게 되새기는 C 프로그래밍
리눅스 환경도 스레드 생성 원리는 동일한건가요?
리눅스도 마찬가지로 이해하면 될까요?Os 가 프로세스에게 적절한 메모리를 할당하여 프로세스에게 자원을(메모리 공간)을 주는 것으로 이해했습니다. 프로세스 안에 구성원들(쓰레드) 개별적인 행동을 하는 주체로 이루어져 있다고 이해했습니다. (PS) 저번에 어느 강좌인지는 기억이 안나지만 리눅스는 프로세스 중심 윈도우는 쓰레드 중심으로 자원을 분배한다고 들어서 구분이 필요한가 싶었습니다. 추가로 하나의 쓰레드들은 하나의 main을 실행 시킨다고 배웠습니다. 이게 여러 싱글 코어에서는 쓰레드들끼리 컨텍스트 스위칭을 하면서 동시에 실행이 되는 것처럼 보이는 concurrency 특성이 있다고 정리가 되었는데, 이때 쓰레들끼리는 멀티 쓰레드를 표현하는 것인가요? 멀티 쓰레드가 정확히 어느 레이어에서 사용하는지 구분 짓고 싶습니다. 다른 프로세스 안에 쓰레드를 말하는 것인지 코어들에서 쓰레드를 말하는 것인지 아니면 단일 프로세스 안에 쓰레드를 말하는지 정리가 안 돼서 질문드립니다.정리를 하면서 수업을 들어야 하는데 업무랑 부족한 cs 지식이랑 빠르게 수용하려다 보니 걸리는 부분이 계속 생기는 거 같습니다. 항상 답변을 친절히 알려주셔서 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
부호 있는 정수, 부호 없는 정수
예를 들어 8비트 2진수1010 1110 이 있을 때컴퓨터가 어떻게 맨 앞 비트가 부호비트인지 아닌지 아는 것인가요?양수 174가 될수도 있고 음수 -46이 될 수 있는데 컴퓨터가 어떻게 그것을 구분하는 것인지 궁금합니다..