묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨홍정모의 따라하며 배우는 C언어
따배씨 스터디 많은 관심 부탁드립니다 ㅎ
스터디 란에 글 올렸습니다 관심 있으신분들 참여 부탁드려요 ㅎ
-
미해결
if, else if, else는 한몸인가요?
if ~~ break; else if ~~~~ else ~~~~ 라고 하면 break시 else if, else 다 건너뛰고 내려오나요?
-
미해결
for 문을 두개 이상쓰고 else if를 쓰면 안되나요?
if (m == 'L') for (o = 1; o < i; o++) printf(" "); for (j = 1; j <= s; j++) printf("*"); else if(m == 'R') for (k = 1; k <= n-i; k++) { printf(" "); } for (p = 1; p <= s; p++) { printf("*"); } printf("\n") 저기서 왜 for 문을 두개 이상쓰고 else if를 사용하면 안되는걸까요..ㅜㅜ
-
해결됨홍정모의 따라하며 배우는 C언어
[5.11 자료형 변환] 3:22 부분부터 시작되는 ranking 개념
[ 3:22 ] 시작 자료형의 ranking 개념을 소개해주시고 계십니다. "실수형 사이에서는 랭킹이 명확하다" "정수형은 실수형보다 랭킹이 낮다." "정수와 실수의 연산을 하면 정수를 형변환 한 뒤에 실수끼리 더한다" ranking 개념을 '연산 우선도' 정도로 번역해도 될까요? 단순히 랭킹이 높다 라고 하시니 잘 이해가 되질 않습니다. 이를태면, unsigned int a = 1, b = 0; int c = -2 b = a + c; printf(%u, b); 이러면 unsigned int 변수인 b 가 -1이 되니 오버플로우가 일어나는데 랭크는 연산 순서? 우선도?에만 관련이 있는것이지 표현 범위와는 관계가 없다고 이해해도될까요? (근데 글을 쓰다보니 든 생각인데 애초에 코드를 생각하면서 잘 쓰면 일어날 일이 없는 것이군요...)
-
미해결
float는 4바이트? 8바이트?
float가 4바이트지만 오류발생? 등을 방지하기 위해 8바이트에 넣는다고 하셨는데, 이게 float도 8바이트에 넣는 "경향"이 있는 건가요 아니면 8바이트로 바꾸도록 처음부터 설계되어있는 건가요?
-
미해결
비주얼 스튜디오 X86이랑 X64 뭘로 해놓고 공부해야하나요?
강의에서 X64 추세로 간다고 하셨는데 제 VS는 X86으로 돼있네요.. 64로 바꿔놓고 공부하는게 좋을까요??
-
미해결
3.14f 같은거?
3.141592f 처럼 뒤에 f를 꼭 붙이시던데 처음 봐서 질문 드립니다... 어떤 의미에서 사용하고, 왜 붙여주는 거죠? 무조건 붙여줘야하나요..? 흔하게 안쓰는 것 같아서요..
-
해결됨홍정모의 따라하며 배우는 C언어
15:58 질문입니다.
modifiable L-values 를 오타 내신건가요? 아니면 현업에서 l value를 줄여서 저렇게 표기하는 약속같은게 있는건가요? 구글링해도 도움이 되지 않아 질문합니다.
-
미해결
이스케이프 시퀀스 질문
printf("\\ \'HA+\' \"Hello\" \? \n"); 이렇게 하는데 왜 맨 앞에가 \로 출력이 안되고 원화표시로 출력이 되나요??
-
미해결
왜 저는 obj파일이랑 exe파일이 안생겼을까요...?
따배씨 공부중인데 정상적으로 파일을 실행시켰고 문제없이 완료됐는데 왜 저는 오브젝트 파일이랑 exe파일이 안생겼나요??
-
미해결홍정모의 따라하며 배우는 C언어
좀 이상할수 있는 포인터 질문입니다....
보시다시피 주소값의 최소 단위는 4byte라고 강의에서 배웠는데요. 이게 말하자면 4byte 간격으로 데이터를 저장할 수 있다는 의미 이잖아요. 위 코드는 말그대로 어떤 주소값에 1을 더하면 4byte 만큼 증가하니까 그 증가된 주소값에 새로운 데이터를 적용할 수 있겠다 싶어서 그걸 구현한 코드인데요. 코드는 제가 예상한 것대로 잘 나오는데 저런 알수없는 경고표시가 뜹니다. 혹시 왜그런건지 알 수 있을까요? 아 그리고 주소값을 2를 더하면 8byte만큼 증가라는 뜻이잖아요 1이 아니라 2 이상을 더해주면 위의 경고문구가 안뜹니다. 또 질문이 있는데 위의 코드는 x64환경에서 디버깅 할시 주소값을 1 더했을경우 4byte 간격으로, 2를 더했을 경우 8byte 간격으로 잘 나오는반면에 x86환경에서 디버깅을 할시 2를 더했을때 어쩔때는 8byte 간격으로 잘 나올때도 있는데 어쩔때는 2byte 간격으로 출력이 됩니다. 혹시 이것도 왜이런건지 알 수 있을까요? 아... 제가봐도 질문이 너무 이상해서 죄송합니다 ㅠㅠ
-
미해결홍정모의 따라하며 배우는 C언어
고정너비 정수에 대한 질문입니다
int 타입은 하드웨어 의존 가능성이 있으므로 플랫폼에 따라 4바이트 또는 2바이트로 실행이 될 수 있으므로 이식성에 문제가 있을 수 있음을 설명하셨습니다. 그래서 플랫폼 independent하게 4바이트로 고정 될 수 있는 int32_t라는 타입이 있는 것으로 이해가 됩니다. 그러나 stdint.h에 정의되고 있는 아래 typedef에 의하면 그냥 원래 int 를 int32_t라는 이름으로 재정의하고 있을 뿐입니다. 그런데 왜 이것이 32비트로 고정이 되는지 궁급합니다. 즉, int32_t i 로 i 변수를 define 한다는 것은 int i 와 다를 바가 없는 것으로 이해가 됩니다. 아시겠지만 tydef는 구글링 한 바로는 아래와 같습니다. typedef int int32_t; The typedef is a keyword used in C programming to provide some meaningful names to the already existing variable in the C program. It behaves similarly as we define the alias for the commands. In short, we can say that this keyword is used to redefine the name of an already existing variable.
-
해결됨홍정모의 따라하며 배우는 C언어
NULL을 이해한건지 알고싶습니다.
안녕하세요, 질문이 있습니다. 제가 이해한게 맞는건지 확인하고자 합니다. int* a = NULL; 을 사용한다는 것은 int b; scanf("%d", &b) if (b % 2 == 0) a = &b; 처럼 입력값에 따라 실제 메모리 공간을 할당받은 메모리주소를 가진 변수b를 조건이 true일 경우 제대로 대입이되서 사용이 가능한거고 조건이 false일 경우 그대로 NULL인 값을 포인터 변수 a가 가지고 있을때 포인터 변수 a를 이용하는 구문을 만났을때 printf("%p %d", a, *a); 이대로 실행하면 런타임 에러가 발생하기 때문에 이걸 방지하고자 if (a != NULL) printf("%p %d", a, *a); 이것처럼 조건을 걸어 제대로 값을 대입받았다면 실행이 되고 그러지 아니하면 실행이 안되고 그냥 런타임 에러 없이 넘어가기 위함 인가요? 제가 한번더 확인하고자 NULL 말고 int *a = 1; 을 한다음 if (a != 1) printf("%p %d", a, *a); 을 해도 런타임 에러없이 그냥 넘어가더라구요 그래서 NULL로 초기화 해준게 a포인터 변수를 이용하는 구문을 만났을때 그냥 적어두면 오류가 발생하니 조건의 기준을 정하기 위해 임시로 NULL을 넣은게 아닌가 생각했습니다. * 두번째 질문. * NULL을 눌러서 vcruntime.h 로 들어가서 보니 ((void *) 0) 이라고 define으로 되어 있더라구요 이 의미는 다른의미가 있나요? 아니면 0과 같나요? 실제 NULL하고, 0을 int *a 포인터 변수에 초기화를해서 %p로 출력해보니까 둘다 같은 16진수인 00000000 으로 나오더라구요. 같은건지 아니면 다른의미가 있는데 이어지는 강의에서 나오는건지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
질문 있습니다
바로 전 질문 8:26에 대해 답변해주신 부분 중 일부 "ar1은 a pointer to [3] int 이자 그냥 int[2][3] 입니다." 와 관련해서 질문을 좀 드립니다. 1. ar1[0][0]은 배열의 요소 값을 나타내고, ar1[0]=&ar1[0][0] a pointer to int ar1=&ar1[0] a pointer to [3] int &ar1 a pointer to [2][3] int 이렇게 정리했는데 맞나요? 2. ar1은 a pointer to [3] int 이자 그냥 int[2][3]입니다 에서 궁금한 점은 ar1이라는 이름이 코드에서 사용했을떄는 a pointer to [3] int 용도로만 사용되는거 맞나요? 그냥 int[2][3]이라는 말은 ar1이 int[2][3]으로 정의되있다는거고 이걸 가리키려면 &ar1을 사용하면 되는거죠? 질문 이해하셨으면 좋겠네요 ㅠ.ㅠ 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
printf 에서는 왜 & 를 사용하지 않는 것인가요?
안녕하세요, scanf 에서는 메모리의 주소에 접근해서 입력값을 넣어줘야 하기 때문에 & 를 사용한다고 하셨는데 그렇다면 printf 에서는 어떻게 & 를 사용하지 않고, 그냥 변수명만 넣어줘도 컴퓨터가 값을 가져올 수 있는 것인가요? 원리가 궁금해서 질문 남겨놓습니다.
-
해결됨홍정모의 따라하며 배우는 C언어
재귀 호출 개념에 대해서 이해한건지 확인 부탁드립니다.
안녕하세요, 선생님 제 나름대로 이해할려고 풀어서 이해해봤는데 이게 맞는건지 확인해보고 싶습니당 선생님이 작성한 예제에서 이해한 내용은 my_func(my_func(my_func(my_func))) 이런식으로 실행이 되고 스택도 n(n(n(n))) 이런식으로 쌓인다고 이해했습니다. 그리고 반대로 돌아갈때도 my_func(my_func(my_func(my_func))) 에서 my_func(my_func(my_func)) my_func(my_func) 이런식으로 돌아가는 형태로 이해했습니다. 그러면 스택에서도 n(n(n)) -> n(n) 이런식으로 위에서 없어지는 걸로 이해했습니다 그래서 이걸 좀 더 명확히 이해하고자 저의 생각한대로 코드를 작성해서 디버거로 테스트를 해보았습니다. 제가 이해한 형식대로 코드를 작성을 해보았더니 돌아가는 형태를 확인했습니다. main함수에서 A함수를 호출하고 A함수에서 B함수를 호출하는 형태로 구성을 해보면 (main -> A -> B) B함수의 코드들이 끝나면 바로 main 함수로 돌아갈줄 알았는데 A함수로 돌아가고 그 다음 A함수에서 main함수로 돌아가는걸 확인했습니다. (B -> A -> main) 디버거로 돌아가는 걸 찍어보았습니다. 마지막 함수인 test3이 종료가 되면 바로 main 함수로 가서 끝나는게 아닌 test2로 가는걸 화살표로 확인할 수 있었습니다. 게다가 test2로 돌아갈때 test2함수의 영역 끝인 } 로 돌아가는것이 아닌 test3함수를 호출한 구문으로 돌아가는것을 확인하였습니다. 그 다음 f11을 눌러 확인해본 결과 test3함수의 변수인 n이 스택에서 사라지고 test2로 돌아와 n변수를 printf로 재출력 해본 결과 스택에 남아있었던 test2의 n변수가 출력이 되어 기존에 출력했었던 거와 메모리주소가 동일하단걸 확인하였습니다. 즉 실행이 되었던 되감기 형태로 돌아가서 종료가 된다는걸로 이해했습니다만 제가 이해한게 맞는건지 확인 부탁드리겠습니다.. ㅜㅜ
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
C언어 문의
강의를 듣고 있는 학생입니다. c++을 공부하는 과정에서 기반인 C에 대한 지식도 있어야 한다는 말을 많이 듣는데 c에 관한 부분도 강의를 진행하실 계획이 있으신지 문의드리고 싶습니다.
-
해결됨홍정모의 따라하며 배우는 C언어
컴퓨터의 구성요소 역할 질문
1. 주 기억장치(=메모리)가 전원을 끄면 데이터가 사라지잖아요. 그래서 전원을 꺼도 데이터가 저장되는 보조기억장치로 보완한다는데 CPU(연산을 하는 부분)는 보조기억장치에 직접 접근할 수 없어서 주 기억장치랑만 왔다갔다한다는데 그러면 CPU는 전원이 켜져있을 때만 작동하고, 주 기억장치랑만 왔다갔다하므로 얘도 전원을 키면 주 기억장치 처럼 데이터가 싹 사라지나요?? 맞다면 전원이 꺼져있는 상태라면 운영체제나 그 외 데이터 이런것도 싹 없는 상태이고 전원을 킬때마다 보조기억장치에서 꺼내쓰는거겠네요? 맞나요? 2. 근데 강의 도중 메모리(=주 기억장치)가 저장을 하는 기능이라고 말씀하신 것 같은데 얘는 전원을 끄면 데이터가 싹 사라지잖아요...? 근데 보조 기억장치는 안사라지잖아요. 그럼 데이터를 저장하는 기능하는 것은 보조 기억장치 아닌가요? 그리고 또 정리하자면 저장하는 기능= 보조기억장치 주기억장치는 그냥 속도를 빠르게하는 역할 및 CPU에 정보를 전달하는 역할 인건가요? 3. RAM은 주 기억장치에 속한 장치인가요? 임의 접근이 가능한 메모리 라고 하셨는데 정확히 무엇을 접근하는건지 모르겠어요. 4. 그래픽카드는 그냥 계산량을 늘리는 역할을 하는건가요? 5. FDD와 자기테이프의 역할은 뭔가요? (그냥 어원만 알려주셔서..ㅠㅠ) 6. CPU에서 레지스터가 메모리처럼 저장을 하는 부분이라는 말인가요?.. 그니까 연산말고도 저장도 한다는 말인가요? 그 저장되는건 메모리에서 얻은 정보들? 죄송해요 처음 공부하는거라 궁금한 것이 산더미네요ㅠㅠ 뭔가 자세히 설명은 안해주신 것 같은데 지금 수준에서는 필요 없어서 그런건가요??
-
미해결홍정모의 따라하며 배우는 C언어
2진수 0 - 1 빼기 계산법을 모르겠습니다
UINT_MAX + 1의 더하기 오버플로우 이진수표현은 이해가 갑니다 1111 + 1 -------- 10000 >> 0000 그런데 0 - 1 빼기 오버플로우 이진수표현은 이해가 안됩니다 10000 - 1 -------- 1111 빼기는 어떤 방식으로 계산되는지 이해를 못했습니다 혹시 더하기 방식과 동일하게 앞에 - 기호를 무시하고 0에 1을 대입하는 건가요? ex) 11111 >> 1111
-
미해결어셈블리어 배우기
empty 파일에 비어있는 파일이 아니네요
유튜브로 넘어와서 empty.exe 파일을 다운로드 받았습니다. 그런데 빈파일은 아니더라구요 ㅠㅠ 혹시 저만 그런건가요??