Call by Value, Call by Reference 개념

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

C 언어에서 'Call by Value' 방식으로 함수에 인자를 전달할 때 발생하는 주요 특징은 무엇입니까?

  • 실인자의 값이 형식인자에 복사되어, 함수 내 변경이 원본에 영향을 주지 않는다. (correct)
  • 함수 내에서 실인자의 값을 변경할 수 없어, 데이터의 안정성이 보장된다.
  • 실인자의 주소가 형식인자에 복사되어, 함수 내 변경이 원본에 직접 반영된다.
  • 실인자와 형식인자가 메모리 공간을 공유하여, 메모리 효율성이 증가한다.

C 언어에서 'Call by Reference'를 사용하는 주된 이유는 무엇입니까?

  • 함수 호출 시 인자의 복사본을 생성하여 메모리 사용량을 줄이기 위해
  • 함수 내에서 인자의 값을 변경하지 않고 읽기만 할 때 메모리 사용을 최적화하기 위해
  • 함수 외부의 변수에 접근하는 것을 방지하여 보안을 강화하기 위해
  • 함수 내에서 인자의 값을 변경하여 호출자에게 변경된 값을 반영하기 위해 (correct)

C 언어에서 배열을 함수 인자로 전달할 때, 'Call by Value' 방식을 사용하면 어떤 비효율적인 문제가 발생할 수 있습니까?

  • 함수 내에서 배열의 크기를 변경할 수 없어 유연성이 감소한다.
  • 함수 외부에서 배열의 요소에 직접 접근할 수 없어 데이터 보안이 강화된다.
  • 배열의 모든 요소가 복사되어 메모리 사용량이 증가하고, 시간적 오버헤드가 발생한다. (correct)
  • 배열의 시작 주소만 전달되어 함수 내에서 배열의 내용을 수정할 수 없게 된다.

C 언어에서 배열을 함수 인자로 전달할 때 일반적으로 배열의 시작 주소를 전달하는 이유는 무엇입니까?

<p>'Call by Value' 방식의 비효율성을 피하고, 배열의 복사 없이 함수에서 배열에 접근하고 수정할 수 있도록 하기 위해 (B)</p>
Signup and view all the answers

다음 C 코드에서 foo 함수 호출 후 배열 x의 값은 어떻게 변할 까요?

void foo(int a[]) {
    int temp;
    temp = a[0]; a[0] = a[1]; a[1] = temp;
    a[2] = 99;
}

int main() {
    int x[] = {1, 2, 5, 7, 9, 0, 4, -1};
    foo(x);
}

<p>{2, 1, 99, 7, 9, 0, 4, -1} (C)</p>
Signup and view all the answers

다음 C 코드에서 readArray 함수의 올바른 정의는 무엇입니까? (배열 d에 데이터를 입력받아 저장하고, -1이 입력되면 입력을 중단합니다. lend에 저장된 데이터의 개수를 저장합니다.)

<p>void readArray(int d[], int &amp;len) {} (C)</p>
Signup and view all the answers

다음 C 코드에서 print 함수의 올바른 정의는 무엇입니까? (배열 d에 저장된 len개의 데이터를 출력합니다.)

<p>void print(int d[], int len) {} (C)</p>
Signup and view all the answers

다음 C 코드에서 copy 함수를 구현하려고 합니다. s[]에 저장된 len2개의 데이터를 d[]로 복사하고, len1d[]에 저장된 데이터의 개수를 저장합니다. 다음 중 올바른 함수 정의는 무엇입니까?

<p>void copy(int d[], int &amp;len1, int s[], int len2) {} (D)</p>
Signup and view all the answers

다음 C 코드에서 append 함수를 구현하려고 합니다. d[]에는 len1개의 데이터가 저장되어 있고, s[]에는 len2개의 데이터가 저장되어 있습니다. s[]의 데이터를 d[]에 추가하고, len1d[]에 저장된 데이터의 개수를 저장합니다. 다음 중 올바른 함수 정의는 무엇입니까?

<p>void append(int d[], int &amp;len1, int s[], int len2) {} (D)</p>
Signup and view all the answers

C 언어에서 구조체를 정의하는 이유로 가장 적절한 것은 무엇입니까?

<p>서로 다른 타입의 데이터를 하나의 이름으로 묶어 새로운 자료형을 정의하기 위해 (A)</p>
Signup and view all the answers

다음 C 코드에서 구조체 Array의 정의로 올바른 것은 무엇입니까?

<p>struct Array { int data[100]; int len; }; (D)</p>
Signup and view all the answers

C 언어에서 구조체 변수를 선언할 때 메모리가 할당되는 시점은 언제입니까?

<p>구조체 변수 선언 시 (C)</p>
Signup and view all the answers

C 언어에서 구조체의 멤버에 접근하는 방법으로 올바른 것은 무엇입니까?

<p>구조체이름.멤버이름 (A)</p>
Signup and view all the answers

C 언어에서 구조체 변수의 입력과 출력에 대한 설명으로 올바른 것은 무엇입니까?

<p>구조체 멤버 별로 일일이 입력 또는 출력해야 한다. (C)</p>
Signup and view all the answers

구조체를 사용하여 프로그램을 수정할 때 구조체 정의의 위치로 가장 적절한 곳은 어디입니까?

<p>함수 외부 또는 헤더 파일 (B)</p>
Signup and view all the answers

구조체를 사용하지 않는 경우와 비교했을 때, 구조체를 사용하는 것의 장점으로 가장 적절한 것은 무엇입니까?

<p>코드의 가독성 향상 및 유지보수 용이 (B)</p>
Signup and view all the answers

다음 C 코드에서 readArray 함수의 올바른 정의는 무엇입니까? (구조체 Array의 멤버 data에 데이터를 입력받아 저장하고, -1이 입력되면 입력을 중단합니다. lendata에 저장된 데이터의 개수를 저장합니다.)

<p>void readArray(Array &amp;a) {} (D)</p>
Signup and view all the answers

다음 C 코드에서 print 함수의 올바른 정의는 무엇입니까? (구조체 Array의 멤버 data에 저장된 len개의 데이터를 출력합니다.)

<p>void print(Array d) {} (B)</p>
Signup and view all the answers

다음 C 코드에서 copy 함수를 구현하려고 합니다. 구조체 Array의 멤버 data에 저장된 데이터를 다른 구조체 Array의 멤버 data로 복사합니다. d는 복사될 구조체이고, s는 복사할 구조체입니다. 다음 중 올바른 함수 정의는 무엇입니까?

<p>void copy(Array &amp;d, Array s) {} (A)</p>
Signup and view all the answers

다음 C 코드에서 append 함수를 구현하려고 합니다. 구조체 Array의 멤버 data에 저장된 데이터를 다른 구조체 Array의 멤버 data에 추가합니다. d는 데이터를 추가할 구조체이고, s는 추가할 데이터가 저장된 구조체입니다. 다음 중 올바른 함수 정의는 무엇입니까?

<p>void append(Array &amp;d, Array s) {} (D)</p>
Signup and view all the answers

C 언어에서 구조체를 'Call by Value'로 함수에 전달할 때 발생하는 문제점은 무엇입니까?

<p>구조체의 크기가 클 경우 메모리 낭비가 심하고, 성능 저하가 발생할 수 있다. (D)</p>
Signup and view all the answers

C 언어에서 구조체가 'Call by Value'로 전달되는 것을 방지하고, 함수 내에서 구조체의 값을 변경해야 할 때 어떤 방법을 사용해야 합니까?

<p>구조체를 'Call by Reference'로 전달한다. (A)</p>
Signup and view all the answers

C 언어에서 구조체 인자가 함수 내에서 변경되지 않도록 보호하려면 어떻게 해야 합니까?

<p>인자를 참조로 전달하고 <code>const</code> 키워드를 사용하십시오. (B)</p>
Signup and view all the answers

다음 C 코드에서 readString 함수는 문자열을 어떻게 처리합니까?

struct String {
    char s[100];
    int len;
};

void readString(String &a) {
    cin >> a.s; a.len = strlen(a.s);
}

<p>문자열을 배열 <code>a.s</code>에 저장하고 길이를 <code>a.len</code>에 저장합니다. (D)</p>
Signup and view all the answers

다음 C 코드에서 문자열을 출력하는 올바른 방법은 무엇입니까?

struct String {
    char s[100];
    int len;
};

<p>cout &lt;&lt; a.s; (C)</p>
Signup and view all the answers

다음 C 코드에서 문자열 s를 문자열 d에 복사할 때 고려해야 할 가장 중요한 사항은 무엇입니까?

struct String {
    char s[100];
    int len;
};

void copy(String &d, const String &s) {
    // 복사 코드
}

<p>문자열의 끝에 널 종료 문자(' (C)</p>
Signup and view all the answers

구조체를 사용하여 스택을 구현할 때 스택의 push 연산은 일반적으로 어떤 작업을 수행합니까?

<p>주어진 데이터를 스택의 <code>top</code> 위치에 저장하고 <code>top</code> 값을 증가시킵니다. (C)</p>
Signup and view all the answers

다음 C++ 코드의 실행 결과로 예상되는 출력은 무엇입니까?

struct Stack {
    int s[100];
    int top;
};

void push(Stack &a, int data) {
    a.s[a.top] = data;
    a.top++;
}

int pop(Stack &a) {
    a.top--;
    return a.s[a.top];
}

int main() {
    Stack a, b;
    a.top = 0;

    push(a, 10); push(a, 20); push(a, 30);
    cout << pop(a) << ", " << pop(a) << endl;
    cout << a.top << endl;

    return 0;
}

<p>30, 20\n1 (D)</p>
Signup and view all the answers

다음 중 C 언어에서 구조체 배열을 선언하는 올바른 방법은 무엇입니까?

<p>구조체이름 배열이름[크기]; (C)</p>
Signup and view all the answers

다음 C++ 코드에서 구조체 Point의 배열을 동적으로 할당하고 초기화하는 방법으로 가장 적절한 것은 무엇입니까?

struct Point {
    int x, y;
};

<p>Point* points = (Point*)malloc(sizeof(Point) * 10); for (int i = 0; i &lt; 10; ++i) { points[i].x = i; points[i].y = i; } (B)</p>
Signup and view all the answers

C 언어에서 구조체 배열의 특정 요소에 접근하는 방법으로 올바른 것은 무엇입니까? 예: points라는 구조체 배열에서 세 번째 요소의 x 멤버에 접근

<p>points[2].x (D)</p>
Signup and view all the answers

다음 중 구조체 배열을 함수의 인자로 전달하는 올바른 방법은 무엇입니까?

<p>모든 방법이 유효합니다. (A)</p>
Signup and view all the answers

C++에서 구조체 배열의 요소를 삭제할 때 메모리 누수를 방지하려면 어떻게 해야 합니까?

<p>delete[] 연산자를 사용하여 배열에 할당된 메모리를 해제합니다. (B)</p>
Signup and view all the answers

다음 중 C 언어에서 구조체와 배열의 주요 차이점은 무엇입니까?

<p>구조체는 다른 데이터 유형의 요소를 포함할 수 있지만 배열은 동일한 유형만 포함할 수 있습니다. (D)</p>
Signup and view all the answers

다음 C++ 코드의 출력은 무엇입니까?

#include <iostream>
#include <cstring>

using namespace std;

struct String {
    char s[100];
    int len;
};

void concatNAssign(String &c, const String &a, const String &b) {
    strcpy(c.s, a.s);
    strcat(c.s, b.s);
    c.len = strlen(c.s);
}

int main() {
    String str1 = {"Hello", 5};
    String str2 = {"World", 5};
    String result = {"", 0};

    concatNAssign(result, str1, str2);
    cout << result.s << endl;

    return 0;
}

<p>HelloWorld (C)</p>
Signup and view all the answers

Flashcards

Call by Value란?

실인자의 값을 형식인자로 복사하여 전달하는 방식. 함수 내에서 형식인자의 값을 변경해도 호출한 곳의 실인자 값은 변하지 않음.

Call by Reference란?

실인자의 주소를 형식인자로 전달하는 방식. 형식인자에 &를 붙여 표시하며, 실인자와 형식인자가 동일 메모리 공간을 사용.

배열을 인자로 전달하는 방법

배열을 인자로 전달할 때 배열 전체를 복사하는 대신 배열의 시작 주소를 전달하는 방법.

구조체란?

여러 종류의 데이터를 묶어 하나의 새로운 자료형으로 정의하는 것.

Signup and view all the flashcards

구조체 멤버란?

구조체 내부에 선언된 변수들을 가리키며, 구조체의 멤버에 접근할 때는 '.' 연산자를 사용.

Signup and view all the flashcards

구조체 변수 입출력 방법

구조체 변수를 한 번에 입출력하는 것은 불가능하며, 각 멤버별로 일일이 입출력해야 함.

Signup and view all the flashcards

\0의 역할

문자열의 끝을 표시하는 특수 문자.

Signup and view all the flashcards

스택이란?

데이터를 임시 저장하는 자료 구조. 후입선출(LIFO) 원칙.

Signup and view all the flashcards

Study Notes

Call by Value

  • Call by Value는 실인자 값을 형식 인자로 복사하여 전달하는 방식이다.
  • 호출된 함수에서 형식 인자의 값을 변경해도 호출한 곳의 실인자 값은 변하지 않는다.

Call by Reference

  • Call by Reference는 실인자를 형식 인자로 전달하는 또 다른 방식이다.
  • 형식 인자에 &를 붙여 Call by Reference임을 표시한다.
  • 실인자와 형식 인자가 동일한 메모리 공간을 공유하므로, 함수 내에서 형식 인자의 값을 변경하면 호출한 곳의 실인자 값도 변경된다.

배열을 인자로 전달

  • Call by Value 방식으로 배열을 인자로 전달하면 배열 전체가 복사되어야 한다.
  • 배열 복사에는 시간이 많이 소요되므로 함수 호출 과정이 비효율적이다.
  • 배열을 인자로 넘길 때는 배열의 시작 주소를 넘겨주는 방법을 사용한다.
  • 배열의 시작 주소를 전달하면 함수 내에서 배열의 값을 변경할 경우 원래 배열의 값도 변경된다.

배열 활용 프로그램 작성

  • 데이터를 입력받아 배열 d[]에 저장한다.
  • -1이 입력되면 입력을 중단하고 return한다 (-1은 배열에 저장하지 않음).
  • len은 d[]에 저장된 데이터의 개수를 저장한다.
  • d[]에 저장된 len개의 데이터를 출력한다.
  • s[]에 저장된 len2개의 데이터를 d[]로 복사한다.
  • len1은 d[]에 저장된 데이터의 개수를 저장한다.
  • d[]에는 len1개의 데이터가 저장되어 있다.
  • s[]에 저장된 len2개의 데이터를 d[]에 추가한다.
  • len1은 d[]에 저장된 데이터 개수를 저장한다.

구조체 정의

  • 구조체는 하나 이상의 변수(멤버)를 묶어 새로운 자료형을 정의하는 것이다.
  • 구조체를 정의하면 새로운 타입이 정의되며, 이를 사용하여 변수를 선언할 수 있다 (사용자 정의 타입).
  • 구조체 정의는 변수 선언이 아니라 타입 정의이다.
  • 정의된 구조체로 변수 선언을 할 때 메모리가 할당된다.

구조체 멤버 접근

  • 멤버 접근 연산자(.)를 사용하여 구조체 멤버에 접근한다.
  • 구조체 변수를 한 번에 입력하거나 출력할 수 없으며, 각 멤버별로 일일이 입력 또는 출력해야 한다.
  • 구조체 정의는 함수 밖이나 헤더 파일에 위치해야 한다.
  • 구조체를 사용하여 프로그램을 수정할 수 있다.

구조체를 사용한 프로그램과 사용하지 않은 프로그램 비교

  • 구조체를 사용하면 여러 관련 데이터를 하나의 단위로 묶어 관리할 수 있다.
  • 구조체를 사용하여 프로그램을 수정하면 코드의 가독성과 유지보수성을 높일 수 있다.

구조체 수정

  • struct String 구조체는 문자 배열 s[100]과 문자열 길이 len을 멤버로 가진다.
  • 문자열을 저장하기 위해 구조체를 사용한다.
  • 배열에 데이터를 저장하려면 반복문을 사용해야 하지만, 문자열의 경우 cin >> a.s;와 같이 한 번에 입력받을 수 있다.
  • a.len은 a.s[]에 저장된 문자열의 길이를 저장한다.
  • 문자열의 길이는 strlen() 함수를 사용하여 구할 수 있으며, 이 함수를 사용하려면 cstring 헤더 파일을 include해야 한다.
  • a.s[]에 저장된 문자열을 출력하기 위해 cout << a.s;를 사용한다.
  • 문자열을 복사할 때 모든 문자열의 끝에는 '\0'라는 특수한 문자가 들어가야 한다.
  • 이 문자가 들어가지 않으면 문자열을 다룰 때 문제가 생길 수 있다.
  • d.len은 d.s[]에 저장된 문자열의 길이를 저장한다.
  • d.s[]에는 길이가 d.len인 문자열이 저장되어 있다.
  • s.s[]에 저장된 길이가 s.len인 문자열을 d.s[]에 추가한다.
  • d.len은 d.s[]에 저장된 문자열의 길이를 반영하도록 변경되어야 한다.

스택 구현

  • 구조체를 사용하여 스택을 구현할 수 있다.
  • struct Stack 구조체는 배열 s[100]과 스택의 top 위치를 나타내는 변수 top을 멤버로 가진다.
  • push() 함수는 data를 배열 s[top] 위치에 저장하고 top 값을 1 증가시키는 역할을 한다.
  • pop() 함수는 top 값을 1 감소시킨 후 s[top]에 저장된 데이터를 반환하는 역할을 한다.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

배열과 구조체 PDF

More Like This

Call of the Wild: Chapters 1-4 Review
32 questions
Call of the Wild Chapter 1 Notes
11 questions
Call of the Wild Chapter 3 Flashcards
23 questions
Call of the Wild Chapter 4 Flashcards
11 questions
Use Quizgecko on...
Browser
Browser