책 내용 질문하기
답변에 대한 질문.
도서
2025 시나공 퀵이지 정보처리기사 실기 단기완성
페이지
57
조회수
205
작성일
2024-07-25
작성자
유*찬
첨부파일

안녕하세요 길벗수험서 운영팀입니다.

30개의 요소를 갖는 n이라는 문자형 배열을 전역변수로 선언을 했고

gets(n); 에서 사용자로부터 입력받은 문자열을 n에 저장을 합니다


return n; 코드에서 반환하는 값으로 n을 썼는데 여기서 n이라는 것은 배열의 이름이고

배열의 이름을 지정하면 배열의 시작주소를 의미하는 것으로

n배열의 시작주소를 함수를 호출했던 곳으로 반환을 해줍니다.


아래의 코드에서 어떤것을 실행을 하여 getname( ) 함수를 호출을 하든

반환값은 return n; 을 만나 n의 시작주소를 반환해주니 n1, n2, n3모두 같은 주소가 반환이 되는것입니다

char* n1 = getname( );

char* n2 = getname( );

char* n3 = getname( );

행복한 하루되세요 :)


라는 답변을 받았는데요,


char* n1 , n2 , n3 n 뒤에 붙어있는 숫자는 무엇을 의미하나요 ? 의미가 없는건가요?

( ex - n11이 와도 배열의 첫 주소 인건가요?


또한

char * n1

char * p1

으로 배열을 설정해도

return n을 만나면

같은 주소에 있는( ex-1000) 입력값을 출력해 주면 되는건가요?


return n과 배열의 첫주소이름 n1에 있는 n은 다른 n인거 맞죠 ?


갑자기 이 n에 대해 헷갈리네요 .


가장중요하고 궁금한 ...

char*n1 =getname()


char*n2 =getname()


char*n3 =getname()


에서 배열 선언이 바뀔때마다


같은 주소인 1000번째에 계속 리셋이되면서 gets(n) 입력이 되는건가요 ?


왜 리셋이 될 수 있는건가요 ?

답변
2024-07-25 23:01:52

안녕하세요 길벗수험서 운영팀입니다.


하나의 기억장소에는 하나의 값만 기억할수 있습니다.

a = 10 이렇게 쓰면 10이라는 값이 a에 저장됩니다.

a = 20 이렇게 쓰면 이때 기존에 가지고 있던 10이라는 값은 없어지고 20이라는 값이 a에 저장됩니다.



char* n1 = getname( );

char* n2 = getname( );

char* n3 = getname( );

3개의 코드 모두다 문자형 포인터 변수 n1, n2, n3를 선언하는데

getname( ) 함수를 호출한 후 돌려받은 값으로 초기화해라 라는 뜻입니다.

여기서 n1, n2, n3는 모두 변수명입니다.


위에 있는 코드를 한줄씩 만날때 마다 getname( ) 함수를 호출을 하고

getname( ) 함수중

gets(n) 을 만나 사용자로부터 문자열을 입력받아 n에 저장을 하고

return n 을 만나 n의 시작주소(1000번지)를 함수를 호출했던 곳을 반환을 해줍니다.


char* n1 = getname( ); 이코드를 만나 getname( ) 함수를 호출할것이고

gets(n); 첫번째로 이코드를 만나면 사용자로부터 "홍길동" 문자열을 입력받아 n에 저장을 하고

return n 을 만나 n의 시작주소 1000번지를 함수를 호출했던 곳을 반환을 해주면

n1변수는 1000번지 주소를 갖습니다.


char* n2 = getname( ); 이코드를 만나 getname( ) 함수를 호출할것이고

gets(n); 두번째로 이코드를 만나면 사용자로부터 "김철수" 문자열을 입력받아 n에 저장을 하고

return n 을 만나 n의 시작주소 1000번지를 함수를 호출했던 곳을 반환을 해주면

n2변수는 1000번지 주소를 갖습니다.


char* n2 = getname( ); 이코드를 만나 getname( ) 함수를 호출할것이고

gets(n); 두번째로 이코드를 만나면 사용자로부터 "박영희" 문자열을 입력받아 n에 저장을 하고

return n 을 만나 n의 시작주소 1000번지를 함수를 호출했던 곳을 반환을 해주면

n3변수는 1000번지 주소를 갖습니다.


그리고 그 밑에 있는 아래 3줄의 코드를 실행해 결과값을 출력을 하는데

n1변수에 1000번지, n2변수에 1000번지, n3변수에 1000번지를 가지고 있습니다.

이때 1000번지에는 현재 "박영희"데이터가 저장이 되어있으니

아래 3줄의 코드에서 "박영희"가 출력됩니다

printf("%s\n", n1);

printf("%s\n", n2);

printf("%s\n", n3);

행복한 하루되세요 :)

  • 관리자
    2024-07-25 23:01:52

    안녕하세요 길벗수험서 운영팀입니다.


    하나의 기억장소에는 하나의 값만 기억할수 있습니다.

    a = 10 이렇게 쓰면 10이라는 값이 a에 저장됩니다.

    a = 20 이렇게 쓰면 이때 기존에 가지고 있던 10이라는 값은 없어지고 20이라는 값이 a에 저장됩니다.



    char* n1 = getname( );

    char* n2 = getname( );

    char* n3 = getname( );

    3개의 코드 모두다 문자형 포인터 변수 n1, n2, n3를 선언하는데

    getname( ) 함수를 호출한 후 돌려받은 값으로 초기화해라 라는 뜻입니다.

    여기서 n1, n2, n3는 모두 변수명입니다.


    위에 있는 코드를 한줄씩 만날때 마다 getname( ) 함수를 호출을 하고

    getname( ) 함수중

    gets(n) 을 만나 사용자로부터 문자열을 입력받아 n에 저장을 하고

    return n 을 만나 n의 시작주소(1000번지)를 함수를 호출했던 곳을 반환을 해줍니다.


    char* n1 = getname( ); 이코드를 만나 getname( ) 함수를 호출할것이고

    gets(n); 첫번째로 이코드를 만나면 사용자로부터 "홍길동" 문자열을 입력받아 n에 저장을 하고

    return n 을 만나 n의 시작주소 1000번지를 함수를 호출했던 곳을 반환을 해주면

    n1변수는 1000번지 주소를 갖습니다.


    char* n2 = getname( ); 이코드를 만나 getname( ) 함수를 호출할것이고

    gets(n); 두번째로 이코드를 만나면 사용자로부터 "김철수" 문자열을 입력받아 n에 저장을 하고

    return n 을 만나 n의 시작주소 1000번지를 함수를 호출했던 곳을 반환을 해주면

    n2변수는 1000번지 주소를 갖습니다.


    char* n2 = getname( ); 이코드를 만나 getname( ) 함수를 호출할것이고

    gets(n); 두번째로 이코드를 만나면 사용자로부터 "박영희" 문자열을 입력받아 n에 저장을 하고

    return n 을 만나 n의 시작주소 1000번지를 함수를 호출했던 곳을 반환을 해주면

    n3변수는 1000번지 주소를 갖습니다.


    그리고 그 밑에 있는 아래 3줄의 코드를 실행해 결과값을 출력을 하는데

    n1변수에 1000번지, n2변수에 1000번지, n3변수에 1000번지를 가지고 있습니다.

    이때 1000번지에는 현재 "박영희"데이터가 저장이 되어있으니

    아래 3줄의 코드에서 "박영희"가 출력됩니다

    printf("%s\n", n1);

    printf("%s\n", n2);

    printf("%s\n", n3);

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.