묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
디버거 사용법을 따라하다가 강의와는 다르게 진행되는 것 같아서 문의 드립니다...
브래이크 포인트를 표시하고 디버그스타트를 눌렀는데 강의처럼 안되어서 문의 드립니다.
-
해결됨홍정모의 따라하며 배우는 C언어
매개변수는 포인터, 함수 내에서는 배열?
안녕하세요강의 듣던 중 궁금한 게 생겨 여쭙게 됩니다.double average(double * data_array, int n) { printf("Size = %zd in function average\n", sizeof(data_array)); double avg = 0.0; for (int i = 0; i < n; ++i) { avg += data_array[i]; } avg /= (double)n; return avg; }(1)위의 코드에서 average함수의 매개변수로 포인터변수인 data_array가 들어와 있습니다. double * data_array를 arr1[]로 바꿔도 시스템은 이것을 arr1배열의 첫주소를 가지는 포인터변수 double * (배열명)로 인식한다는 것이 정확한 이해인가요? (2)average함수의 매개변수에 배열을 넣든 뭘 하든 시스템은 배열의 첫 주소를 가지는 포인터 변수로 읽어버립니다. 하지만 코드의 중간 쯤에 있는 avg += data_array[i];에서data_array[i]는 배열의 문법입니다. 물론, 예컨대 arr배열이 있을 때*(arr+10)와array[10]가 같은 요소를 가져온다는 것은 압니다. 하지만 average함수는 기존에 저희가 적은 배열의 정의를 못 만나봤고, 즉 알지 못하고 그 배열의 첫 주소만 가지고 있는 포인터변수만을 가지고 있습니다. 이 때 data_array[i]라고 작성하면 시스템이 이것을 내부적으로 *(data_array + i) 즉, (본 강의에서는 배열명이 arr1 이었습니다) *(arr1 + i)로 바꿔버리나요? 즉, 다시 말해 배열arr1 을 알지 못하고 배열arr1의 첫 주소값이 있는 포인터 변수만을 가지고 있는 함수 average가 어떻게 포인터 문법이 아닌 배열 문법을 쓰는지 궁금합니다. 긴 글 읽어주셔서 감사합니다.
-
해결됨CUDA 프로그래밍 (4) - C/C++/GPU 병렬 컴퓨팅 - 행렬 matrix 곱하기
kernelMatCpy에서는 __syncthreads가 필요없지 않나요
제목 그대로 kernelMatCpy에서는 각 스레드 작업이 다른 스레드에 영향을 주지 않기 때문에 필요없을 것 같은데요. 실제로 __stncthreads()를 제거하고 돌려봐도 정상적으로 결과가 나오구요.혹시 이런 경우라도 내부적으로 꼬일 수 있어서 사용하신 것인지 아니면 대부분의 shared memory로 복사해서 쓰는 경우에 필요하기 때문에 습관(?)차원에서 사용하신 것인지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
포인터 주소 대입
안녕하세요 int *a = &b;코드가 위와 같을 때는 변수 b의 주소를 포인터변수 a에 넣는 걸로 이해했습니다.int *a = 123;코드가 위와 같을 때도 포인터변수 a 에 123이라는 메모리 주소를 넣는다고 이해해도 될까요?
-
해결됨홍정모의 따라하며 배우는 C언어
10.6강 1번 문제 1차원 배열을 2차원 배열로 만드는 문제
double year2021[MONTHS] = { -2.4, 2.7, 9.0, 14.2, 17.1, 22.8, 28.1, 25.9, 22.6, 15.6, 8.2, 0.6 }; double year2022[MONTHS] = { -2.2, -1.1, 7.7, 14.8, 19.1, 23.3, 27.3, 25.7, 22.4, 14.6, 10.0, -2.8 }; double year2023[MONTHS] = { -1.5, 2.3, 9.8, 13.8, 19.5, 23.4, 26.7, 27.2, 23.7, 15.8, 6.8, 3.1 }; // 1. 1차원 배열을 2차원 배열로 구현 // 배열명의 값은 배열의 시작 주소와 같다. double* temperature[] = { year2021, year2022, year2023 }; printf("%zd %zd %zd %zd\n", sizeof(temperature), sizeof(temperature[0]), sizeof(*temperature[0]), sizeof(year2021) ); 1차원 배열(2021년, 2022년, 2023년)의 주소를 2차원 포인터 배열의 요소로 초기화했습니다.// 1. 1차원 배열을 2차원 배열로 구현 // 배열명의 값은 배열의 시작 주소와 같다. double* temperature[] = { year2021, year2022, year2023 }; 2중 for문의 내부 for문의 조건부를 지정할 때 sizeof 연산자를 이용해서 아래같은 방식으로 구현하려고 했습니다.size_t col = sizeof(temperature[0]) / sizeof[double]; for(int j = 0; j < sizeof(temperature) / sizeof(temperature[0]); ++j) { for(int i = 0; i < col; ++i) { // (j, i)번째 요소 출력문 } } 제가 생각한건 'temperature[0]에 저장된 값이 year2021의 메모리 시작 주소와 같으므로 temperature[0]의 값을 역참조하면 year2021 배열 전체를 가리킬 것이다' 였는데sizeof(*temperature[0]);이 값이 year2021의 0번째 double 요소로 역참조되서 그런지 결과값이 8로 잡혀서size_t col = sizeof(temperature[0]) / sizeof[double];col의 값이 1로 계산됩니다.. 어떻게 하면 temperature[0]을 이용해서 배열 year2021의 전체 길이를 반환할 수 있을까요..??
-
해결됨독하게 시작하는 C 프로그래밍
필수실습문제 해답
챕터14 필수실습문제UI와 기능으로 나눠서 세 정수를 입력 받아 최대 값 구하는 문제를 혼자 해보고있는데해답 파일이 찾아봐도 없는거 같아서요 ! 강사님이 작성하신 해답 예시와 비교해보고 싶은데 알려주실 수 있나요? 저는 이렇게 했는데 맞게 한건지 모르겠습니다 ㅜ 코드는 잘 돌아갑니다 그리고 숫자입력을 받는 부분에서 반복문을 사용할 수도 있을까요?for문을 사용할 수 있을거 같아서 시도 해보는 중인데 중간에 막혀서 궁금합니다.막히는거보니 반복문을 쓸 수 없는 부분인거 같기도 해서요 ㅜㅜ숫자 입력 받는 부분을 반복문으로 줄일 수 있을까요?
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
서보모터 제어
안녕하세요 강사님! 강의를 듣고 따라해보다 잘 안되는 부분이 있어 질문드립니다ㅠㅠ제 개인 보드로 서보모터를 제어할려고 강의를 따라해봤는데 서보모터가 반응이 없습니다. 저는 stlink가 내장되어 있는 보드를 사용해서 그냥 usb로 노트북에 연결해서 전원을 연결해 주었는데 혹시 이 전원이 부족해서 그런 것일까요??만약 그렇다면 해결방법은 어떻게 되는지 궁금합니다!참고로 제 보드는 stm32f429zi discovery 보드입니다
-
해결됨독하게 시작하는 C 프로그래밍
C언어랑 관계있는지..
음 클로저와 c언어의 함수 포인터 비슷한 느낌인데 차이점은 무엇일까요클로저란 이름처럼 전역 변수처럼 사용하지만 클로저 함수만 접근 가능하기 떄문에 클로저란 이름을 쓴거 같은데 이점이 함수 포인터와 다른 점일까요... C언어 포인터 질문과 관계가 있는지 몰르겠지만 왠지 클로저 구현을 한다면 포인터를 사용한게 아닐까 싶은생각이 문득 들어서 한번 여쭤봅니다..
-
미해결홍정모의 따라하며 배우는 C언어
재출력이 안돼요.
파일에 저장할 텍스트를 입력하는 것까지는 문제가 없는데 while (fscanf(fp,"%s",words) != EOF) fprintf(stdout,"%s\n",words);이 문장이 제대로 실행되지 않는 것 같아요
-
해결됨독하게 시작하는 C 프로그래밍
필수 실습 예제 질문 있습니다.
예제는점수 0~100점을 입력 받아서 80점 이상 이면 합격 그렇지 않으면 불합격이라고 출력하는 프로그램 작성입니다.#include<stdio.h>int main(void){ unsigned int input = 0; scanf_s("%d", &input); (input <= 100) ? printf("점수를 입력하세요: %d\n", input) : 0; (input <= 100) ? printf("결과 : %s", (input >= 80) ? "합격" : "불합격") : 0; return 0;}저는 이런 식으로 코드를 짰는데 잘못된 점이 있는지 궁금합니다. 0~100을 나타내는 코드가 영상에 안 나와서 질문 드립니다.
-
미해결C 프로그래밍 - 입문부터 게임 개발까지
질문이 있습니다
상당히 간단한 것일 수도 있겠지만 궁금한데여러 줄 주석 처리를 할 때 한 번에 묶는 것을 어떻게 하는지 알려주실 분 계신가요?
-
미해결홍정모의 따라하며 배우는 C언어
warning이 안지워져요 3.4강의 21분
3.4 강의 21분 43초에 나오는 코드랑 똑같이 작성 하였는데scanf("%f", &Won); 여기에 Warning이 계속 떠 있어요Description은 Return value ignored: 'scanf'. 이렇게 나와 있습니다.선생님은 안뜨는데 왜 저만 떠있나요 버전의 차이인가요? _CRT Secure No Warnings은 properties에 입력해두었습니다. #include <stdio.h> int main(){float Won = 0.0f;float USdollar = 0.0f; printf("Input Won\n");scanf("%f", &Won); <<<<<<<<<<< 이 부분 USdollar = Won * 0.00089f;printf("USdollar = %f\n",USdollar);return 0;} Return value ignored: 'scanf'. 라고 떠있어
-
미해결홍정모의 따라하며 배우는 C언어
scanf & 버퍼
안녕하세요강의의 최종 코드 중 일부입니다.... printf("input one character and two integers:\n"); while ((c = getchar()) != '\n') { scanf("%d %d", &rows, &cols); while (getchar() != '\n') continue; display(c, rows, cols); ...여기서 A 3 2(엔터)를 입력하면 상단의 c=getchar()에 의해 getchar이 A를 가져가고 버퍼는 |A 3 2\n| 에서 | 3 2\n| 로 변하게 됩니다.(띄어쓰기 유의) 그다음 scanf("%d %d", &rows, &cols); 는 버퍼의 맨 앞의 띄어쓰기를 읽어야 하지 않나요? 그런데 아시다시피 scanf가 입력버퍼에서 읽는 것은 3과 2입니다. scanf가 띄어쓰기를 읽는다고 알고 있는데 3앞의 공백이 어떻게 처리된건지 궁금합니다. 감사합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
10.2강 27:09에서 질문이 있습니다.
가변 길이 배열에 대해서 위키에는 길이를 런타임에 결정하는 배열(whose length is determined at run time (instead of at compile time).)라고 정의되어있는데요.https://en.wikipedia.org/wiki/Variable-length_array int main() { const int n = 8; int arr[n]; };제가 작성한 코드에서 n이 8로 초기화 및 상수로 되어 있는데 이건 컴파일 타임에 이미 배열의 길이를 결정해 놓은게 맞나요??오류가 나는 것은 비주얼 스튜디오의 컴파일러가 이 문법을 지원하지 않아서 일까요,,??
-
해결됨독하게 시작하는 C 프로그래밍
포인터 질문드립니다
개념이 잘 안 잡혀서 다시 한 번 여쭈고자 질문을 남깁니다. 변수 : 메모리 공간을 사용하는 방법포인터 : 변수가 저장된 메모리 공간의 주소변수에 바로 값을 대입 : 직접 지정포인터로 접근해 값을 대입 : 간접 지정제가 이해한 개념이 맞을까요?
-
미해결독하게 시작하는 C 프로그래밍
scanf("%d\n", &input)
수업을 듣다 궁금증이 생겨서 질문드려요~scanf("%d\n", &input);4입력시 4\n여서 종료하려면 \n하나가 더 필요 한거 까지는 이해가 됐습니다. 그후에 \n를 계속 눌러도 안넘어가지는게 어떤 것때문인지 궁금합니다.%d\n 형식을 사용하므로 형식에 안맞는 \n는 안읽고%d\n의 형식만 읽는건가요?아니면 %d\n 는 숫자와 (1개 이상의 공백문자)여서 엔터가 계속 입력되고 %d(다른정수)\n입력시 \n를사용하므로 %d만남기고 종료되는건가요?형식이 달라서 안읽는건지 \n가 1개이상의 공백문자를뜻해서 여러번읽는건지 궁금합니다!
-
해결됨홍정모의 따라하며 배우는 C언어
포인터에 저장되는 주소값의 자료형
포인터 변수가 어떤 변수의 주소값을 저장한다는 것은 이해했습니다.그런데 메모리의 '주소'는 어떤 자료형에 속하나요?형식지정자 %p로 출력해보면 16진수로 나오는 것 같은데 정수형이라고 생각해도 될까요??
-
해결됨독하게 시작하는 C 프로그래밍
for문 증감 연산
이 두 구문에서 차이는 증감연산자가 전위인지 후위인지 인데 for문에서는 전위든 후위든 작동 방식에 있어서는 차이가 없지 않나요? i = 0 일때 조건식을 검사해서 참이므로 i를 출력하고 i++든 ++i든 i의 값을 1 증가 시킨후에 다시 조건식을 검사하는 것으로 알고 있습니다. chat gpt에서 차이가 있다고 나오는데 설명이 명확하지 않아 여쭈어 봅니다! 정리하자면 전위와 후위의 근본적인 차이점은 알고 있지만 그것이 for문 증감식으로 쓰일땐 결과적으로 같은 동작 방식을 취하는게 아닌가 궁금합니다 감사합니다!
-
해결됨독하게 시작하는 C 프로그래밍
char ch=0;
char ch=0;ch=getchar()랑char ch=getchar(); 차이가 뭔지모르겠어요ch=0은 다른뜻이있는건가여?자료형 변수 = 정수로 정의하셨는데자료형 변수= 함수로 정의해도 나중에 문제가 생길까여?
-
미해결홍정모의 따라하며 배우는 C언어
1.0625e0과 0.0625e0의 차이
안녕하세요. 강의의 23째 줄 코드를 제가 0.0625e0;로 바꾼 후 build를 해보니까 프로그램 마지막 출력에서 각각 아래와 같은 값이 나왔습니다. 0x1.0000000000000p-4 0X1.0000000000000P-4 저는 0.0625가 1/16이니 출력이 0x1.000...0p-1이나0x0.1000...0p+0일 줄 알았는데 p-4가 나와서왜 이러한 값이 나오는지 질문드립니다.