묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
포인터, 배열, 문자열을 공부하기 위한 최소 범위(?)
안녕하세요컴공과 1학년 학부생입니다.제가 당장 2주뒤에 c언어 중간고사를 보는데, 범위가 (포인터, 배열, 문자열) 입니다.문제는 제가 c언어를 이번 학기에 처음 배워서 이 강의를 들으며 따로 공부하고 있지만, 중간고사 전까지진도를 나가지 못할 것 같습니다.일단 포인터, 배열, 문자열 공부를 시작해야 하는데 이 것을 하기 위해 최소한으로 ~는 해야한다이런 것이 있을까요?진도는 섹션3까지 나갔습니다.
-
해결됨독하게 시작하는 C 프로그래밍
Putchar 관련 질문입니다
Puchar 명령어는 buffer에 값을 넣는 것뿐만아니라 printf 처럼 화면에 출력하는 기능까지 포함된 것이라고 이해해도 될까요? getchar는 문자를가져와 읽는 기능인 것처럼 putchar또한 메모리 buffer안에만 write하는건 아닐까 했습니다.
-
해결됨Windows 시스템 프로그래밍 - 기본
WaitForSingleObject 함수 질문
WaitForSingleObject 함수 질문드립니다. 핸들을 넘겨주고 해당 스레드의 상태가 변화하는지를 체크한다고 하셨는데, 여기서 말씀하신 변화라는게 어떤 것을 말씀하시는걸까요?
-
미해결홍정모의 따라하며 배우는 C언어
포인터 산술과 관련해서 질문 드립니다
printf("Note: t is for pointer difference, %td\n", ptr2 - ptr1); 에서 포인터 간의 차이로 배열 사이의 거리 또한 알 수 있다고 이해하였습니다. 그런데 의문이 드는게 포인터는 char* arr 이던 int *arr이던간에운영체제에서 정해준 크기로 항상 같다는것으로 알고 있는데 이처럼 double* ptr1, *ptr2로 선언하고double arr1[5] = { 10, 13, 12 ,7, 8 };ptr1 = &arr1[0];ptr2 = &arr1[4];double 형의 배열의 요소에 적용을 하였더니원하는 결과인 4가 나왔습니다 하지만 이처럼 int* ptr1, *ptr2; 로 선언하고double arr1[5] = { 10, 13, 12 ,7, 8 };ptr1 = &arr1[0];ptr2 = &arr1[4];printf("Note: t is for pointer difference, %td\n", ptr2 - ptr1); 로 포인터 사이의 거리를 출력하라 했더니8로 나왔습니다.이는 실제 포인터 연산에서는 int형으로 계산했지만메모리 간의 실제 간격은 double 형이라서 4바이트인 int형의 2배인 8바이트간의 거리라서 8 * 4 / 4 = 8 인 결과가 나온것인가요? 포인터간의 연산은 포인터가 선언된 자료형에 따라서 그 크기가 결정되는것인가요?
-
미해결홍정모의 따라하며 배우는 C언어
3.13 불리언형 질문
b1=0;b1=1;이걸 왜 해줘야 되나요?
-
해결됨독하게 시작하는 C 프로그래밍
디바이스 파일에 대해서 여쭤보고 싶습니다.
안녕하세요. 강사님.입출력과 관련된 부분은 운영체제가 처리를 해주는 것으로 알고있습니다. 일반적으로 입출력을 수행할 때 OS가 제공해주는 API를 사용해서 입출력을 수행할텐데 그 행위 자체가 내부적으로 디바이스 파일을 사용하도록 구현이 되는 구조인걸까요 ?디바이스 파일을 제공해주는 것은 알겠는데 그걸 직접적으로 활용하는 코드는 다뤄본적이 없어서요...
-
해결됨독하게 시작하는 C 프로그래밍
[ 문자, 정수 입력과 개행문자 제거 ] scanf_s, gets_s 차이점
설명을 잠시 멈춰두고 혼자서 예제를 만들어봤습니다 근데 gets_s 함수대신 scanf_s 함수를 사용해서도 결과물이 똑같이 나왔는데 어떤걸 사용하든 상관이 없나요?#include <stdio.h>int main(void){ char szName[32] = { 0 }; int nAge = 0; printf("나이를 입력하시오 : "); scanf_s("%d", &nAge); printf("이름을 입력하시오 : "); scanf_s("%s", szName, sizeof(szName)); printf("\n"); printf("당신의 나이는 %d세 입니다\n", nAge); printf("당신의 이름은 %s입니다\n", szName); return 0;}
-
미해결홍정모의 따라하며 배우는 C언어
부동소수점형
3.11 부동소수점형 9:17에서 8비트 언사인드 정수는 0에서부터 255까지라고 하셨는데 왜 1부터 256이 아니라 0부터 255까지인건가요? 그리고 왜 124에서 127을 빼줘야 되는지 이해가 안가요 2^124-127 이부분이요
-
해결됨CUDA 프로그래밍 (4) - C/C++/GPU 병렬 컴퓨팅 - 행렬 matrix 곱하기
global memory를 사용한 matrix copy 대비 global memory를 활용한 matrix transpose가 속도가 느린 이유가 궁금합니다.
안녕하세요.먼저 좋은 강의 감사드립니다. 아래 소스는 matcpy-dev.cu에서 가져온 kernel 함수입니다.global void kernelMatCpy( float* C, const float* A, int matsize, size_t pitch_in_elem ) { register unsigned gy = blockIdx.y * blockDim.y + threadIdx.y; // CUDA-provided index if (gy < matsize) { register unsigned gx = blockIdx.x * blockDim.x + threadIdx.x; // CUDA-provided index if (gx < matsize) { register unsigned idx = gy * pitch_in_elem + gx; // in element C[idx] = A[idx]; } }} 그리고 다음 소스는 transpose-dev.cu에서 가져온 kernel 함수 입니다.global void kernelMatTranspose( float* C, const float* A, unsigned matsize, size_t pitch_in_elem ) { register unsigned gy = blockIdx.y * blockDim.y + threadIdx.y; // CUDA-provided index if (gy < matsize) { register unsigned gx = blockIdx.x * blockDim.x + threadIdx.x; // CUDA-provided index if (gx < matsize) { register unsigned idxA = gy * pitch_in_elem + gx; register unsigned idxC = gx * pitch_in_elem + gy; C[idxC] = A[idxA]; } }} 메모리 접근 관점에서 보면 각 thread별로 A에서 read해서 C에 write하는 동일한 과정으로 보이는데, 결과는 속도 차이가 많이 나는 정확한 원인이 궁금합니다. memory coalescing 때문으로 추정하고 있는데, 맞는 생각일까요?감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
t 쓰는 이유
3.9 고정 너비 정수 3:22 질문입니다 int32_t 에서 언더바 뒤에 t를 써야 되는 이유가 뭔가요? 왜 t인지 궁금해요
-
미해결홍정모의 따라하며 배우는 C언어
실수 질문
3.5 정수와 실수 16:45 질문입니다 실수에서는 왜 Unsigned가 없는건가요? 소수도 부호를 가질 수 있지 않나요?
-
미해결홍정모의 따라하며 배우는 C언어
정수 질문
3.5 정수와 실수 12:09 화면 캡처 질문입니다 각 칸에 0과 1이 들어가야 되는 이유랑 왜 0101 1110인지 궁금합니다 어떤건 0이고 어떤건 1인데 어떻게 구분하는건가요?
-
미해결홍정모의 따라하며 배우는 C언어
안녕하세요
안녕하세요인프런은 처음인데따배C강의 무제한이면 언제든지 계속 들을수있는건지 궁금합니다.혹시 아는내용은 스킵해도 수료증발급가능한지도 궁금합니다.감사합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
10-17. 변수로 길이를 정할 수 있는 배열
안녕하세요. 제가 설명하는 내용이 맞는지 몰라 질문드립니다.제 설명의 틀린 부분을 지적해주시면 감사하겠습니다. visual studio가 아닌 온라인 c compiler를 이용하면 가변 길이 변수를 사용할 수 있습니다.가변 길이 변수를 이용하면,int sum2d_4(int row, int col, int ar[row][col]) // row 생략 가능 { int r, c, tot = 0; for (r = 0; r < row; r++) for (c = 0; c < col; c++) tot += ar[r][c]; return tot; }이와 같은 함수를 사용할 수 있습니다.즉 int sum2d_2(int ar[][COLS], int row) { int r, c, tot = 0; for (r = 0; r < row; r++) for (c = 0; c < COLS; c++) tot += ar[r][c]; return tot; }이 함수와 달리, symbolic constant(매크로)를 사용하지 않고 함수의 매개변수 만으로 배열 메모리에 접근하여 함수의 기능을 구현할 수 있는 것입니다.따라서 VLAs의 기능을 통해,int sum2d_3(int* ar, int row, int col) { int r, c, tot = 0; for(r = 0; r < row; r++) for(c = 0; c < col; c++) tot += *(ar + c + col * r); // ar[c + col * r] return tot; }포인터를 이용한 위의 함수처럼, 매개변수 만으로 함수의 기능을 구현하고 배열 메모리에 접근할 수 있습니다.다만, c언어에서 동적할당이 VLAs의 기능을 대체할 수 있고 컴파일러에 따라 VLAs가 불안정하게 작동할 수 있기 때문에 현재 visual studio에서는 사용이 막혀있습니다. 이상의 설명 중 틀린 부분을 지적해주시면 감사하겠습니다.늘 친절하고 세세한 답변 감사합니다.좋은 하루 보내세요!
-
해결됨독하게 시작하는 C 프로그래밍
강의 "16진수가 표기가 사용되는 예"에서 8:35
안녕하세요 유투브에서 알게 되어서 강의구매까지 한 전진호입니다.메모리 화면에서 64bit를 설명하시고, 16바이트를 계산하셨는데, 저 바이트 코드가 왜 적힌 것이고, 어떤 의미인지 궁금합니다.
-
해결됨독하게 시작하는 C 프로그래밍
비주얼 스튜디오 클래스 뷰 설정 관련
비주얼 스튜디오 클래스 뷰 설정에서 여러 프로젝트 항목들은 어떻게해야각종 예제들을 묶은 경우와 같이 리스트가 생성 되는지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
scanf가 작동하는 방식 %d, %lf
scanf가 작동하는 방식이 %d가 들어있다면 정수를 받겠다고 판단을 해서 1.23456이 들어와도 1까지만 받아들이는 것이고 %lf인 경우에는 실수 형태를 받겠다고 판단을 해서 1.23456을 1.23456까지 다 받아들인다는 건가요?
-
미해결홍정모의 따라하며 배우는 C언어
포인터
int* ptr = arr;printf("%p %p", ptr, arr); 이럴 때 ptr은 arr주소로 가는 것이라 ptr의 주소는 따로 있다고 생각을 했거든요. 그래서 둘의 주소값이 다르다고 생각했는데 왜 같게 나오는 건가요..계속 이어서 수강했는데, 어디 강의로 가야 이에 대한 설명을 들을 수 있을까요, 아니면 여기서 설명해주시면 감사하겠습니다.
-
미해결홍정모의 따라하며 배우는 C언어
c언어에서 바이너리 표현
강의 3분08초를 보면c++같은 경우에는 바이너리 넘버(2진수표현법)를 코딩할 때 직접 사용할 수 있지만 c언어같은 경우 불가능하다고 하셨는데 숫자앞에 0b를 붙여서 표현가능하지 않나요?ex) 0b00000001이렇게 가능하지 않나요?제가 다르게 이해한 걸까요?감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
이중 포인터와 const
안녕하세요. 이중포인터에 const를 어느 위치에 붙이냐에 따라 고정되는 값에서 차이가 생기는데, 제가 그 차이를 제대로 이해한 것이 맞는지 몰라 질문드립니다.#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int x = 20; int* p1 = &x; const int* const * pp2 = &p1; const int** const pp2 = &p1; return 0; }이런 코드가 있다고 할 때,const int* const * pp2 = &p1; 코드에서 고정된 값은 pp2가 한 번 indirection 한 주소값, 즉 p1자체의 값과 x의 값이다.const int** const pp2 = &p1; 코드에서 고정된 값은 pp2 자체의 주소값과 x의 값이다. 이렇게 이해했는데, 맞을까요??늘 친절한 답변 감사합니다.