(*(parr + 1))[1]을 제가 해석해보자면 parr은 arr0을 가리킨다. 거기에 1을 더하면 arr1을 가리키게 된다. 거기에 *를 붙이면 arr1이 가리키는 arr1[0]을 가리키게 된다. 여기에 [1]를 붙이면? arr1[0][1]을 가리키게 되나? 아니면 arr1[1]을 가리키게 되나? 아니면 arr1[1]이 되나? 출력값이 5인걸 보면 맨 오른쪽인것 같은데 (*(parr + 1))은 &arr1[0]이고 거기에 [1]을 붙인다는 게 정확하게 무슨 뜻 인가요? 어떤 식으로 작동하는건지 이해가 잘 안되요. parr[0]은 &arr0[0]이고 parr[0][0]은 arr0[0]이다. 라는 것과 비슷하게 작동하는 건가요? 항상 좋은 답변 감사합니다.
안녕하세요 독하게 시작하는 C언어 프로그래밍 필수 실습문제 1번 질문있습니다. 문제는 나이와 이름을 입력받아 출력하는 문제인데요 저는 이름을 입력받을 문자배열을 선언할때 어떤 길이가 나올지 모르니 최대한 많은 공간을 미리 확보하기 위해 char ch[ ] = {0}; 으로 선언했는데 이렇게 하면 오류가 뜨고 선생님처럼 char ch[32] = {0}; 문자배열의 길이를 선언해야 오류 없이 실행되더라구요 문자배열을 어느 길이로 입력 받을 지 모르니 저처럼 설정하면 왜 안되는 걸까요? 또한 scanf_s("%d%c", %x); 구문에서 입력받은 변수가 int 형으로 정수를 입력 받았는데 그럼 scanf_s("%d%d", %x); 이렇게 입력해야 맞는 것 아닌가요? 왜 scanf_s("%d%c", %x); 이렇게 입력해도 실행이 되는 지 궁금합니다
int sum2d_2(int ar[][COLS], int row); 에서 COLS 자리의 인덱스에 숫자를 적어주는 이유는 ar이라는 포인터의 행의 사이즈는 int * (COLS 자리의 인덱스) 이기 때문이다. 라고 해봤는데 이게 맞거나 비슷한 표현 일까요? 제 표현이 틀린 것 같아 답변자 분이 이해를 할 수 없을 것 같기도 하네요.. ㅈㅅ함미다.
그냥 그렇나 보다 하고 지나칠뻔한 걸 한번 의심을 하니 문제를 놓을 수가 없게 되었습니다. 1. int ar1[2][3] = { {1, 2, 3}, {4, 5, 6} }; int* pt; pt = &ar1[0][0]; for (int i = 0; i < 6; ++i) printf("%d %d ", pt[i], *(pt + i)); 2. int arr[2][3] = { {1, 2, 3}, {4, 5, 6} }; int* parr[2]; parr[0] = arr[0]; parr[1] = arr[1]; for (int i = 0; i < 2; ++i) printf("%p %p ", parr[i], *(parr + i)); 둘 다 똑같이 출력을 했는데 1번 예제는 값이, 2번 예제는 주소가 출력 되는 이유 그러니까 parr[i]가 주소를 출력하니 pt[i]도 주소를 출력 해야 할 것 같은데 값을 출력하는 이유가 궁금합니다. parr은 포인터의 배열이고 pt는 포인터라서? parr의 자료형은 int (*)[3]이고 pt의 자료형은 int*라서? 뭔가 연관이 있을 텐데 저는 어떤 연관이 있는 건지 쉽사리 연결 지을 수가 없더라구요. 꼭 알려주셨으면 합니다. 항상 좋은 답변 감사합니다.
#include <stdio.h> int main() { /* Assume that your input is : Hello 123 3.14 */ char str[255], tmp; int i = 0, i2 = 0; double d = 0.0; scanf("%s %d %lf", str, &i, &d); // POINT1 printf("%s %d %f\n", str, i, d); // or (see the difference) scanf("%c", &tmp); // POINT2 printf("My input was %c!!!\n", tmp); // POINT2_1 scanf("%s %d %d", str, &i, &i2); // POINT3 printf("%s %d %d\n", str, i, i2); // or (see the difference) char c; while ((c = getchar()) != '\n') putchar(c); printf("\n"); return 0; } 안녕하세요 강의를 듣다가 평소에는 무심코 지나쳤던 부분이 눈에 밟혀 질문 드립니다. POINT1에 정상적인 값들을 입력하고 Enter를 누르면 POINT2에서 '\n'이 입력되고 POINT2_1에서 '\n'이 출력된 것을 확인했습니다. 그렇다는 것은 버퍼에 '\n'이 남았다는 것을 알 수 있습니다. 여기서 궁금증이 생겼습니다. POINT2, POINT2_1을 지우고 실행하면 왜 POINT3에서 정상적인 값들을 입력했을 때 str에 '\n'이 입력되지 않는지 궁금합니다. 처음에는 printf() 함수가 알아서 버퍼를 비워주나 생각했었지만 POINT2, 2_1을 통해 그건 아니라는 것은 확인했습니다. 그래서 제 딴에 생각한 것은 'scanf() 함수에서 여러 개의 값들을 입력 받으면 (한 개의 값만 입력 받을 때와 달리) 버퍼에 남아있던 '\n'을 자동으로 무시해 주는 것이다.' 인데 이것이 맞는지 궁금합니다.
정수형 강의 내용 중 long 자료형 크기에 대해 궁금한 점이 생겨 질문드립니다! 64비트 기준으로, long 자료형이 4바이트라고 설명해 주셨는데, sizeof 연산자로 long 변수 크기를 확인할 경우 8바이트로 나오게 되어 질문드립니다. 제목과 같이 32와 64간 자료형의 크기를 비교한 자료가 있을까요?? 검색 결과 작성자마다 약간씩 차이를 보여 질문드립니다. 감사합니다.
안녕하세요 선생님 질문이 하나 있습니다. dp(6-5) = dp(1)이고 dp(6-3)은 dp(3)을 나타내고 이제 6번째 배열에서 Min(dp(1)+1, dp(3)+1)에서 최소값은 왼쪽 dp(1)+1이 아닌가요? 왜 dp(3)+1로 된건지 이해가 안갑니다. 대괄호가 기입이 안돼 소괄호로 대체합니다.
연결리스트 삭제 시 헤드노드가 NULL인 경우를 고려해야 하는 이유가 궁금합니다. 삭제 전에 삭제할 노드를 미리 찾는 과정이 수반되는데, 그 과정은 헤드노드가 NULL값이 아니라는 것을 전제로 이루어집니다. 따라서 삭제할 노드를 찾아서 삭제를 진행하는 단계까지 왔다는 것은 헤드노드가 NULL이 아니라는 것을 전제로 한다고 볼 수 있습니다. 그럼에도 불구하고 삭제를 진행하는 함수에서 헤드노드가 NULL인 경우를 고려하시고 이에 대한 예외처리 코드를 작성하셨는데, 혹시 그에 대한 이유가 있을까요?
안녕하세요. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() { /* strcpy() and strncpy() */ // 1 char dest[100] = ""; // make sure memory is enough char source[] = "Start programming!"; //dest = source; // Error //dest = "Start something"; // Error strcpy(dest, source); puts(dest); return 0; } 라는 코드에서 주석 처리된 "dest = source;"과 "dest = Start something;"의 오류가 "expression must be a modifiable lvalue"임을 확인했습니다. 이는 dest가 배열의 이름이며, 배열의 이름은 메모리 갖지 않기 때문에 나타나는 오류인가요? 또 strcpy() 함수를 사용하지 않고 배열 dest에 source의 문자열을 넣으려면 다음처럼 코드를 작성하면 될까요? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() { /* strcpy() and strncpy() */ // 1 char dest[100] = ""; // make sure memory is enough char source[] = "Start programming!"; for (int i = 0; i < strlen(source); i++) dest[i] = source[i]; puts(dest); return 0; }
안녕하세요 강의를 듣고 궁금한 점이 생겨 질문 드립니다. strcmp() 함수가 문자열을 비교할 때 1 혹은 -1을 출력하는 기준이 아스키코드라고 알고 있습니다. Bananas와 Banana를 비교했을 때, 둘의 순서를 바꿈에 따라 값이 다르게 출력되는 것을 확인했습니다. 단일 문자는 첫 번째 인수의 아스키코드가 더 작으면 -1이 더 크면 1이 출력되는 것은 이해했습니다. 그런데 문자열은 어떤 방식으로 -1과 1이 출력되는지 잘 모르겠습니다. 늘 친절한 답변 감사합니다.