안녕하세요, 14.22 강의를 듣다가 함수 포인터는 아니지만 예제 속 변수의 포인터에 관한 의문이 생겨 질문 남깁니다. 1. 해당 예제를 따라하다가 toupper, tolower함수의 사용과 변수들의 저장에 대해 궁금증이 생겨 아래 코드를 작성하고 실행을 시켜 보았는데요, void ToUpper(char* str1) { printf("Address of str(before toupper function operate) : %lld\n", (long long)str1); while (*str1) { *str1 = toupper(*str1); str1++; } printf("Address of str(after toupper function operate) : %lld\n", (long long)str1); } void ToLower(char* str2) { printf("Address of str(before tolower function operate) : %lld\n", (long long)str2); while (*str2) { *str2 = tolower(*str2); str2++; } printf("Address of str(after tolower function operate) : %lld\n", (long long)str2); } int main() { char str[] = "Hello World!"; void (*pf)(char*); pf = &ToUpper; printf("String literal: %lld\n", (long long)("Hello, World!")); printf("Function pointer: %lld\n", (long long)ToUpper); printf("Function pointer, pointer ver: %lld\n", (long long)pf); printf("Variable : %lld\n", (long long)str); printf("\n"); (*pf)(str); printf("\n"); printf("ToUpper ver: %s\n", str); printf("Address of str after function ToUpper Operate: %lld\n", (long long)str); pf = &ToLower; printf("\n"); (*pf)(str); printf("\n"); printf("ToLowerr ver: %s\n", str); printf("Address of str after function ToLower Operate: %lld\n", (long long)str); return 0; } 먼저 main 함수 내에서 str의 주소를 찍어 본 결과 "Variable : 803261380856"라는 주소값이 출력된 걸 볼 수 있고 이를 ToUpper 함수에 넣고 다시 주소를 찍어보니 "Address of str(before toupper function operate) : 803261380856"로, 같은 주소가 출력된 걸 볼 수 있었습니다. (char*로 받아줬으니 당연하겠지만요.) 이후 ToUpper 함수 내에서 toupper 함수가 포함된 while 문이 돌아간 후 다시 주소를 찍어보니 원래 값보다 12가 추가된 803261380868라는 값이 출력된 걸 볼 수 있었고, 이는 while문 내에서 str1++연산이 수행되며 *str의 각 characer를 대문자로 바꿔주는 과정이 있었기 때문에라고 생각했습니다. 의문이 생겼던 부분으로, ToUpper가 실행된 결과가 끝나고 "ToUpper ver: HELLO WORLD!"가 출력된 후, str의 주소를 다시 찍어봤는데 12가 추가된 값이 아닌 원래의 주소값이 출력이 된 걸 볼 수 있었는데요, 처음에는 ToUpper 함수의 매개변수의 데이터 타입이 char*이니, 막연하게 str의 주소도 당연히 바뀐 값이 나올 거라고 생각했었는데 생각해보니 위 경우는 포인터의 참조값을 사용한 것이 아닌 포인터 자체의 값을 연산한 것이니 call by value로 포인터 변수가 사용된 것이며, main 함수의 str과 ToUpper의 매개변수인 str1은 처음에는 가리키는 주소가 같았으나 str1의 경우 함수 내에서 가리키는 값이 증가한 후, 해당 함수가 끝날 때 같이 사라지는 지역변수로서 사용된 것이라는 결론이 나왔습니다. 제가 생각한 과정과 결과가 맞는지 궁금합니다. 2. main 함수에서 str의 타입이 char[]로 지정이 되어 있는데, 이를 char* str로 바꾸니 런타임 에러가 나더라구요. char* str로 문자열에 접근하는 것은 read only인 Text Segment의 주소를 가져온 것인데, ToUpper 함수 내에서 str = toupper( str)에서 값을 바꾸려는 시도 때문에 에러가 나는 것이 맞나요? 감사합니다.
설명을 들어서 a=10 static.b = a 니까 static.b++의 출력값은 10이고, 이후 11이 된다고 이해를 했는데, 그러면 그 아래 출력값 a가 10 이면 그대로 똑같이 10이 아니라 왜 st.a는 class Static의 20을 가져오나요? 두번째 출력값은 바로 위 출력값에서 계산된 걸 가져왔는데 네번째 출력값은 왜 가장 위의 클래스 거를 가지고 오는지 개념이 이해가 안됩니다
28분대에 있는 23년 1회 JAVA 문제인데요. 출력값 처음에 Static.b++는 a=10 static.b=a 때문에 출력값 10인 건 이해가 되고, st.b는 왜 0이 아니고, 11인지 이해가 안되고.. 마지막 출력값 st.a은 왜 10이 아니고 20인지 이해가 안되네요. 기출문제부터 따라가기 너무 힘든데 이거 강의를 다시 들어야하나요? 혼자서 문제를 풀면 문제 설명하는 흐름대로 생각이 잘 안나는 것 같아요
질문이 2개인데요... 문제 풀이영상을 보면 sum + (input[a][b]) * di ; input[a][b]에 %10을 넣으면 뭐 때문에 순차적으로 0 , 10, 100, 1000, 00000, 100000 이렇게 되는지 이해가 안되고, 2번째는 di가 1부터 시작을 하고 di*2면 2,4,6,8,10 이렇게 커지는거 아닌가요? 그렇다면 2의2승 2의3승 2의4승 2의5승 이렇게 커지지 않으니까 계산이 안되는 것 같은데 ㅠ.. 좀 어렵네요
안녕하세요. 공부할 때 chat gpt를 자주 활용하고 있습니다. chat gpt에 따르면 getchar()함수를 반환하려면 char a; a = getchar(); 가 아니라 int a; a = getchar(); int형으로 반환을 받아야한다고 하더라구요. EOF를 구분하기 위해서라는데... 그런데 예제들을 보면 char형으로 받는 예제들도 많아서 질문드립니다. 감사합니다.
Call methods of Car class랑 Call methods of ElectricCar Class랑 아래 출력값 왜 start 밑에 줄이 refuel이 나오나요? 앞에 부모 클래스에는 start->stop->refuel 순서대로 나오는데 출력값은 start->refuel->stop으로 나오는데 왜그런지 궁금하네요
28:48 초 swap 으로 함수 선언으로 하고 temp 에 a 주소의 값 203 대입 / a 주소에 b주소의 값 1004 대입 /다시 temp 를 b 주소 값을 대입 후 return 값을 다시 주지 않았는데 어떻게 두번 째 print 에서 바뀌어서 나올 수 가 있는거죠 ? return 값을 주지 않으면 void swap 내 블록에서 변경된 값은 그대로 종료되고 두번째 print는 첫번째 출력값 교환전: x=203, y=1004 랑 동일 하지 않나요?