묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 시작하는 C 프로그래밍
포인터와 배열의 이름의 차이가 궁금합니다.
상수 포인터와 배열의 이름은 유사한 개념이라고 파악하고 있었는데, sizeof(배열의 이름)은 배열의 크기를 출력해준다는 점에서 약간의 차이가 있다는 점을 알게 되었습니다.또한, 참조 연산자를 통한 결과 또한 포인터의 경우, 메모리를 확인한 결과 해당 주솟값을 가리키고 있는 다른 주소의 값을 가지고 있었지만, 배열의 이름은 동일한 주솟값이 결과로 나오는 것을 확인할 수 있었습니다.제가 이해한 바로는 배열의 이름 자체는 배열의 시작 주소이기에 'test2' 는 'H'라는 배열의 시작 주소를 가리키고, '&test2'는 "Hello World"라는 배열 자체 주소를 가리키는 것이라고 판단을 했는데, 이것이 맞는 이해인지 궁금합니다.두 개념이 비슷하지만 약간의 차이가 있는 것 같은데 이 차이에 대해서 설명해주시면 감사하겠습니다.
-
해결됨독하게 시작하는 C 프로그래밍
배열강의에서 l-value r-value 관련 궁금한 점이 있습니다.
안녕하세요강의 감사히 잘 공부하고 있습니다. 배열 강의에서 배열의 이름 int a[4]; 같은 경우 a이 상수와 같은 r value 에 속한다고 하셨는데, 배열 이름은 메모리 상의 데이터 구조를 식별하는 역할을 하며 이는 주소의 불변성과 관련이 있기 때문에 l-value로서 값이 변경되지 않는 특수한 형태로 보는 것이 더 맞지 않나요?
-
해결됨독하게 시작하는 C 프로그래밍
간접 지정 증감 연산 질문 있습니다.
pszData의 총 5가 증가했고 (인덱스가 5개 증가) int형으로 바꾸었기 때문에 주소의 값이 5가 아닌 20이 증가한 것을 확인했습니다.근데 Length의 값이 5가 나오는 것은 어떤 이유 때문인지 정확하게 이해가 안됩니다. 배열의 식별자는 주소 상수이기 때문에 20이 나와야 되는게 아닌가 라고 생각했습니다. 왜 5가 나오는지 잘 모르겠습니다. pszData가 szBuffer와 5만큼 떨어져 있기 때문에 5가 나온 것입니까? 메모리에는 pszData와 szBuffer가 주소 상수값을 가지고 있고 연산한 것처럼 보이는데 왜 5가 나올까요...
-
해결됨CUDA 프로그래밍 (3) - C/C++/GPU 병렬 컴퓨팅 - 메모리 구조
계산시간 비교
알찬 강의 계속 잘 듣고 있습니다!CPU와 GPU version의 계산시간 비교에 대해 질문 드립니다. 커널에서 계산시간만 비교하면 CUDA이 훨씬 빠릅니다. CPU version (filter-host.cu): 44,784 usCUDA version (filter-dev.cu): 830 us하지만 CUDA version에서 메모리 복사를 포함하면 337,737 us 으로 CPU version보다 훨씬 느린 것 같습니다. 혹시 메모리 복사 시간을 줄이는 방법이 있는지요?
-
해결됨독하게 시작하는 C 프로그래밍
달팽이 문제] 설명을 듣지 않고 구현을 해봤습니다.
도전정신 때문에 설명 듣기 전에 구현을 했더니 강사님 의도와 다르게 구현되었지만.... 1시간 헤딩한 시간이 아까워서 남겨둡니다아~~두 가지 접근방법이 생각났는데, 그 중 하나는 이동 불가능할때마다 이동 방향을 바꾼다는 간단한 논리로 위 코드로 구현해봤고,두 번째로 생각난 접근방법은 위 그림처럼 블럭이 5, 4, 4, 3, 3, 2, 2, 1, 1 순으로 첫번째를 제외한 블럭 수가 2개씩 묶인다는 점이 생각났는데, 첫 번째 블록이 규칙에 살짝 어긋난다는 점에서 구현이 복잡해질 것 같아서 포기했습니다. 설명해주신 방법대로 위 그림에서의 블럭이 2개 합쳐진 채로 규칙을 찾았으면 간단하게 구현 가능했을 것 같습니다.설명해주신 방법으로도 구현을 해봐야겠네요..
-
해결됨독하게 시작하는 C 프로그래밍
숙제해왔습니다
25번 반복에 끝낸다는 방향을 잡고 시작했습니다.9, 7, 5, 3, 15/4, 4/3, 3/2, 2/1/ 1/0+/+, -/-, +/+, -/-, +/+그리고 행 증가, 열 증가인지 파악한 후에 코딩했습니다.다른 모범 답안 보니까 저랑 달라서 자신감이 뚝 떨어졌습니다.제가 생각해낸 패턴을 코드로 하나도 구현하지 못한거 같아요 예제 코드보니까... 예제 코드 보면서 현타 많이 왔는데 다시 처음부터 한다고 생각하고 코드짜보겠습니다.
-
미해결홍정모의 따라하며 배우는 C언어
이중포인터
char* arr[] = { "Cherry", "AppleBee", "Pineapple", "Apple", "Orange" }; 인 상태입니다. 이때 swap함수는 void swap(char** a, char** b) { int temp = *a; *a = *b; *b = temp; } 이고 swap(&arr[i], &arr[min_idx]);를 했을 때 두 주소값이 바뀌는 걸 알 수 있습니다. 그런데 이때 파라미터가 이중포인터인 이유가 조금 햇갈립니다. swap함수에 있는 파라미터 a와 b는 그 함수에서만 작동하는 게 아니라 직접 arr함수의 메모리에 작동해야되기 때문에 포인터를 쓰는 것이잖아요? 이떄 a와 b는 각각 그 주소의 포인터가 될 것인데 이때 그냥 포인터가 아니라 이중포인터가 붙는 이유는 arr 자체가 포인터의 배열로서 이중포인터니까 접근하려면 이중포인터 표시를 해야된다라고 생각하면 될까요? (이정도만 생각하면 되는 건지 고민이네요) 만약 그렇다면 이때 a와 b에 디퍼런싱을 한 번만 해서 값을 바꾸는 이유는 우리가 바꾸려는 건 주소값이지 글자 하나를 바꾸는 게 아니기 떄문이다 라고 생각하면 될까요?
-
미해결홍정모의 따라하며 배우는 C언어
포인터에 [ ]을 붙이는건 새로운 문법인가요??
ptr[k]부분이 이해가 가질 않아서요...다른 분들이 올린 질문도 봤는데 2차원 배열도 결국엔 1차원으로 정렬된 메모리라는건 어느정도 이해가 된 것 같은데...포인터 옆에 [ ]를 붙이는 것이 간접 참조 연산자랑 같은 기능을 하는건지 궁금합니다..
-
해결됨독하게 시작하는 C 프로그래밍
quick sort 부분 구현했습니다.
pivot이 되는 5보다 큰 값은 오른쪽의 작은 값과 교환하면서 마지막에는 pivot의 위치도 바꾸어 주었습니다. 이후 코드를 작성한다면 pivot의 값을 다시 0과 high+1로 또 for문을 작성해야 하는데 코드가 무자비하게 길어집니다. 솔직하게 for문 안에서 모든걸 끝내기에는 제가 너무 부족한거같습니다. 이후 배우는 함수에 피벗이나 리스크 길이 등 매개변수로 받아서 리스트 길이가 0이나 1이 될때까지 반복하고 값을 교환해주는 것도 함수로 만들어서 처리하면 좋을 것 같습니다. 코드가 복잡해질수록 너무 어렵네요. 이정도 구현한것으로 만족하겠습니다
-
해결됨독하게 시작하는 C 프로그래밍
선택정렬 if 교환
소스코드 18라인에 if로 j가 변환할떄만 바꿔주신다고 했는데 변환하지 않아도 자기자신끼리 교환하는 거니까 결과값이 달라지진 않잖아요. 근데도 조건문을 사용하는게 더 좋은 코드인건가요?
-
해결됨독하게 시작하는 C 프로그래밍
질문
수업듣다가 말씀하신 부분중에 궁금한부분이 있어서요.혹시 스태틱바인딩, 다이나믹 바인딩 관해서 더 알아보고 싶은데, 설명을 어디강의에서 들을 수 있나요 ~~~?????
-
해결됨홍정모의 따라하며 배우는 C언어
tool() 함수 위치에 따른 에러
안녕하세요,main.c 와 second.c 에서 각각 하기와 같이 적어봤습니다.프로그램을 실행시키면, 하기와 같은 에러가 뜨는데요, undefined warning이 뜨는 이유는 main()함수에서 fun_second()를 실행시, fun_second()로 가서 tool()함수를 실행하려 했으나 전방선언이 되어있는것도 아니고 함수 선언부+몸체가 fun_second() 보다 앞쪽에 정의되있지 않기때문에 tool()함수를 발견할 수 없어 undfined에러가 뜬 것으로 이해했습니다.그런데 redefinition 에러가 뜬건 이해가 잘 되지 않습니다.tool()함수는 fun_second()아래 한번만 정의했는데 어째서 중복 정의라는 에러가 뜬걸까요??수박님 제가 질문한 글에 달아주신 답변 말고도, 다른 질문글에 달아주신 답변들이 독학하는데 정말 큰 도움이 됩니다. 항상 감사합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
int* 만큼 이동한다는 말의 뜻이 궁금합니다.
안녕하세요, 이전 질문글의 답변에서 궁금한 점이 있어 질문드립니다. 링크는 https://www.inflearn.com/course/lecture?courseSlug=following-c&unitId=28273&tab=community&category=questionDetail&q=1142021 이고, 스샷으로 가져왔습니다. 밑줄 친 부분이 이해가 잘 가지 않는데요,arr 배열의 원소타입이 int 이므로 , arr + 1 은 arr[1]을 가리키는 포인터의 위치로 이동한다는 건 잘 알겠습니다. arr, 즉, arr[0]의 주소가 만약 100이면 104 로 이동하겠죠. int 크기가 4바이트니까요.그렇다면, parr + 1도 int* 크기만큼 이동해야 할 것 같은데요, int* 는 주소값을 저장하는 타입이므로 주소값의 크기인 4바이트(혹은 운영체제에 따라 8바이트) 만큼 이동해야 할 것같은데, 하기 첨부한 그림을 보면 parr[0] 시작 주소 부터 parr[1] 시작 주소까지 12바이트를 이동합니다. 직관적으로는 그럴것 같은데 헷갈려서 질문드립니다. 감사합니다.
-
해결됨독하게 시작하는 C 프로그래밍
메모리의 주소가 다르게 출력됩니다.
디버깅 모드로 추적하면서 따라가던 중 콘솔에 출력되는 pszdata의 주소가 &pszdata로 추적하였을 때 나오는 메모리 주소와 다른 값이 출력됩니다 szbuffer는 같은 값이 나왔습니다 .. 왜 그런걸까요 ..??
-
해결됨홍정모의 따라하며 배우는 C언어
* (asterisk) 가 초기화문에서 사용될때, 할당문에서 사용될때 차이.
안녕하세요,초기화문에서 *가 사용될땐 주소가 저장되고,일반 명령문에서 변수앞에 *를 붙이면 앞의 경우와 다르게 redirection 연산자로서 사용되는데 그냥 암기해야 되나요? 간단한 예를 들면, int *a = 0x0077*a = 123;위 두 문장의 의미는 각각 int 포인터 변수 a 를 선언하며 0x0077 이라는 주소값을 a 에 저장. a가 가리키는 주소(0x0077)에 접근하여 123을 저장. 감사합니다.
-
미해결C언어 슈팅게임 따라만들기
mac OS 에서 프로젝트 진행 시 라이브러리 없음
맥 혹은 리눅스에서 프로젝트를 진행하려고하는데 <conio.h><Window.h>등 윈도우에서만 가능한 라이브러리들을 어떻게 하면 좋을까요?다른 방식으로 구현할 수 있는 방법이 있을까요?
-
해결됨Go Hard to C (feat. Algorithm)
stdio.h 파일을 찾을수 없다고 나오네요.
화면과 같이 진행중인 학습자입니다.cmd 에서 stdio.h 파일을 찾을수 없다고 나오는데, 혹시 추가 설치해야 하는 것이 있나요?
-
해결됨홍정모의 따라하며 배우는 C언어
함수 선언부와 정의부가 다른 파일에 있어도 빌드가 되는 원리.
안녕하세요,강의에서main.c 파일 안에 #include "my_print_fucntions.h"를 통해 my_print_functions.h를 main파일에 인클루드해주면, 함수의 선언부만 main.c에 복붙이 됩니다. 선언부는 main.c안에 놓이는거겠죠.그런데 이 때, #include "my_print_fucntions.c" , 함수의 바디가 정의되어있는 my_print_fucntions.c 파일을 main.c 안에서 인클루드해주지 않아도 되는 이유는, 링커가 알아서 함수를 찾아 연결해주기 때문이고, 그렇게 되는 이유는 헤더파일의 함수 선언부에서 extern 키워드가 생략되어있어서 그렇다고 봐도 될까요?( (extern) void print_hello(); 이렇게요.) 감사합니다.
-
해결됨CUDA 프로그래밍 (2) - C/C++/GPU 병렬 컴퓨팅 - 벡터 vector 더하기
매크로 함수를 쓴 이유
안녕하세요!좋은 강의 잘 듣고 있습니다.common.cpp 코드 중에서 ELAPSED_TIME_BEGIN(N)과 ELAPSED_TIME_BEGIN(N)을 매크로 함수로 정의한 이유가 무었인지요?CUDA_CHECK_ERROR() 함수는 __FILE__과 __LINE__ 때문에 매크로 함수로 정의하신 걸로 이해합니다만, 시간 측정 함수들을 매크로함수로 정의하신 이유는 잘 이해되지 않습니다.답변 부탁드립니다.감사합니다.
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
SDIO구현
SD카드 인터페이스와 FATFS 오픈소스를 이용해 출력하는 강의대로 GPIO 핀맵 설정하고 코드를 따라 작성했는데 SD카드에 저장된 데이터가 Character LCD로 출력되지 않습니다. 의심되는 문제는 두 가지입니다. Cube MX 때와 다르게 파일의 구성이 더 세분화 되어있습니다.강의 때 작성한 소스코드에서는 Src 폴더안에 bsp_driver_sd.c 파일과 sd_diskio.c 파일이 같이 들어있는데 현재 업그레이드 된 STM Cube IDE에서는 해당 소스코드가 다른 폴더의 경로로 세분화 되어있습니다. 이것 때문에 인클루드 참조가 어려워져서 참조가 안되는 일부 함수로 인해 SDIO 통신이 안되는 것은 아닌지요??헤더파일의 참조 또한 다릅니다.stm32f4xx_hal_conf.h 파일은 Inc 폴더안에 있는데, 이것을 인클루드 하는 파일은 Drivers ->STM32F4xx_HAL_Driver->Inc->Legacy 경로에 stm32f4xx_hal.h 이 헤더파일이 stm32f4xx_hal_conf.h 파일을 인클루드 하고 있늗네 폴더 경로가 다르면 인클루드시 경로까지 고려하여 다시 작성해야 되는걸로 알고 있습니다. 저렇게 작성하면 참조가 되지 않아 동작이 중단되는 것으로 생각하는데 어떤점이 잘못된 것인지요?? MX_NVIC_Init(); 함수의 내부 코드--> 3번의 경우 UART 통신 / 이전의 외부인터럽트 구현을 위한 것의 초기화로 알고 있는데 SDIO를 위한 NVIC 인터럽트 설정도 있는지요?? 코드를 열어보면 해당내용은 없는데, SDIO구현을 위한 global interrupt는 GPIO 핀맵에서 체크해두면 다른 소스코드에 작성되는 건가요? SDIO구현을 위한 함수를 일일이 다 들여봐야 할 것 같은데 시간상 효율이 떨어지는 길로 보여 질문드립니다. 추가로 해당링크에 제가 작성한 소스코드 파일을 첨부드립니다. https://cafe.naver.com/mhiveacademy/1351