안녕하세요.
기출문제집 3회 실전모의고사 문제 18번의 조건식에 있는 후위연산자에 대해서 궁금한게 있는데요,
int p, q;
p=10;
q = p++ > 10 ? p + 3 : p -3;
func(p.q);
라는 조건식이 있을 때
q = p++ > 10 ? p + 3 : p -3; 이 조건문이
[1] p에 대한 식이 아니어도 증감연산자가 있으면 증감시킨 값을 p에 적용시키면 되나요? (p의 값이 10이었는데 11로 바뀌는게 맞는지)
[2] 저는 지금까지 세미콜로 기준이나 쉼표로 후위연산자가 계산 되는줄 알았는데, 조건식에서도 물음표를 지나면 후위연산자 계산을 하나요?
p++>10 은 비교할 때는 10>10 이지만 해설을 보니 ?(조건) 을 지나면서 11로 계산을 하더라구요
[3] 증감연산자가 연산에 사용 되면 그 값을 새로 적용하는 것과
ex) 5 > 10 ? a++ : b++ 이라면 b 값만 증가시키고 그 값을 b값에 새로 저장한다, a값은 사용되지 않았기 때문에 그대로놔둔다 가 맞나요?
쉼표, 세미콜론, 조건식의 ? 를 지나면 후위연산자를 계산한다.
이렇게 알고 있으면 될까요?
아 추가로 궁금한 사항이 있는데요,
전역함수 지역함수 문제를 보는 방법이 있나요? 음 그러니까 전역함수, 지역함수의 문제의 특징이랄까요?
제가 몇 문제 풀어본 특징으로는
main의 위에 int a = 5 이런식으로 있던데
public class Test {
public static int a = 5 ;
public static void main(String[ ] args) ... 이런식으로
이런 형식 말고 또 다른 형식도 있나요?
void가 있는 것을 지역함수라고 보면 될까요?
void가 반환하지 않는다라고 알고 있는데 맞나요?
제가 아직 프로그래밍 언어를 보는 게 미숙해서
기출문제집 실전모의고사 2회에 있는 문제 10번에 있는
static void init(int a[ ]){
for(int i = a.length -1; i>0; i--) {
a[ i ] += a[ i - 1 ];
}
}
이 부분을 void는 반환을 하지 않으니까 필요없는거야 라고 생각하고
넘겨버렸습니다. void를 어떻게 받아들이면 될까요?
안녕하세요 길벗수험서 운영팀입니다.
[1]
예, p>10 조건 체크 후 p의 값은 1 증가합니다.
[2]
예, 기본적으로 쉼표와 세미콜론이 식을 구분하는 구분자이지만, 이 외에도 몇가지가 있습니다.
삼항연산자의 경우 사실상 if문이 단일화 되었다고 보시면 됩니다.
if (p++ >10) q= p+3;
else q= p-3;
[3]
예, 맞습니다.
다만 삼항연산자의 경우 단일로 사용 못하니 앞에 다른 변수를 달아서 써야하죠.
c = 5 > 10 ? a++ : b++;
[추가]
기본적으로 변수든 함수든 선언된 위치와 그 내부에서만 유효합니다.
public class Test {
public static int a = 5 ;
public static void main(String[ ] args) ...
와 같이 a가 class Test에서 선언되었다면 a는 Test 내부에서 사용할 수 있게 되는 것이죠.
메소드에서 void는 반환값이 없다는 의미가 맞습니다.
다만 메소드에서 특정 변수 및 배열의 주소를 받아 그 위치에 직접 값을 바꾸게 된다면, 반환값이 없더라도 변경사항이 다른 위치에도 적용이 됩니다.
특히 배열이 인수인 경우 '값'을 보내는 것이 아닌 배열의 '시작 위치'를 보내는 것이기 때문에 반환을 하지 않더라도 메모리의 값을 변경하게 되어 변경점이 다른 위치에서도 적용되게 됩니다.
행복한 하루되세요 :)
-
관리자2021-04-13 10:18:38
안녕하세요 길벗수험서 운영팀입니다.
[1]
예, p>10 조건 체크 후 p의 값은 1 증가합니다.
[2]
예, 기본적으로 쉼표와 세미콜론이 식을 구분하는 구분자이지만, 이 외에도 몇가지가 있습니다.
삼항연산자의 경우 사실상 if문이 단일화 되었다고 보시면 됩니다.
if (p++ >10) q= p+3;
else q= p-3;
[3]
예, 맞습니다.
다만 삼항연산자의 경우 단일로 사용 못하니 앞에 다른 변수를 달아서 써야하죠.
c = 5 > 10 ? a++ : b++;
[추가]
기본적으로 변수든 함수든 선언된 위치와 그 내부에서만 유효합니다.
public class Test {
public static int a = 5 ;
public static void main(String[ ] args) ...
와 같이 a가 class Test에서 선언되었다면 a는 Test 내부에서 사용할 수 있게 되는 것이죠.
메소드에서 void는 반환값이 없다는 의미가 맞습니다.
다만 메소드에서 특정 변수 및 배열의 주소를 받아 그 위치에 직접 값을 바꾸게 된다면, 반환값이 없더라도 변경사항이 다른 위치에도 적용이 됩니다.
특히 배열이 인수인 경우 '값'을 보내는 것이 아닌 배열의 '시작 위치'를 보내는 것이기 때문에 반환을 하지 않더라도 메모리의 값을 변경하게 되어 변경점이 다른 위치에서도 적용되게 됩니다.
행복한 하루되세요 :)