#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
__________________________
__________________________
__________________________
__________________________
int main()
{
char familyName[31];
char givenName[31];
scanf("%s %s", familyName, givenName);
printFullName(familyName, givenName);
return 0;
}
문의한 코드는 삭제합니다.
문제를 맞긴 했는데
char *s1 = "고";
char *s2 = "길동";
이렇게 변수를 입력받으면
s1과 s2는 읽기전용아닌가요?
strcat을 쓸수있던데 왜그런지 모르겠습니다.
(도장_ 관리자님이 수정함 - 원문 제출일: 2019년 3월 28일, 목요일, 오후 3:36)
char *s1 = "고";선언과 동시에 할당된 형태일 때 읽기 전용 메모리입니다.
char *s2 = "길동";
문제에 제시된 코드는
char familyName[31];
char givenName[31];
배열입니다.
배열은 읽고 쓸 수 있습니다.
따라서 strcat을 쓸 수 있습니다.
call by value 방식으로 매개변수를 사용할때 이렇게 된다고 들었습니다.
#include<stdio.h>
void swap(int c, int d);
int main()
{
int a=1, b=2;
swap(a,b);
return 0;
}
void swap(int c,int d){
..................................
.................................
}
이런 식의 코드가 있다고 했을 때 a,b의 값이 c,d로 복사가 되는 구조이다
a,b의 값인 1,2가 함수 swap의 매개변수인 c,d로 복사가 된다.
---> 그러면 처음에 선언했던 Name[31]과 별개로 함수안에서 새로운 변수가 선언되는게 아닌가요?char *s1 = "고";
char *s2 = "길동";
함수의 매개변수로 배열이나 포인터로 전달되는 것은 주소를 값으로 전달하는 것입니다. 따라서 call by value가 맞습니다.
해당 주솟값의 위치에 접근해서 값을 읽어오거나 값을 쓸 수 있습니다. 함수를 호출하기 전에 배열이나 malloc으로 메모리 공간을 할당하고, 해당 배열이나 포인터를 인수로 전달하는 것입니다. 즉, 배열의 주소, 포인터의 주소를 값으로 복사해서 전달합니다. 함수 안에서는 주소의 위치에 접근해서 값을 읽거나 쓸 수 있습니다. 새로 변수가 생성되지는 않습니다.
UNIT 63.11은 주소로 전달된 위치에서 값을 읽어서 출력만 하는 함수를 작성하는 문제입니다. 새로운 변수가 생성되지는 않습니다.
배열이나 포인터를 인수로 전달된 경우에는 함수에서 값을 변경하면 함수 호출이 종료된 이후에도 변경된 값이 유지됩니다. 이는 해당 배열이나 포인터가 함수에서 생성된 것이 아니기 때문입니다.
main 함수에서 printFullName 함수를 호출했다면 main -> printFullName으로 생명 주기를 갖습니다. main 함수에서 선언한 변수나 배열, 포인터는 main 함수가 종료된 이후에 사라집니다.(포인터로 할당한 메모리 공간은 free 함수로 해제해야 합니다)