궁금증 연구소

#include <stdio.h>
#include <string.h>

struct Info
{
    char *name;
    char kind[14];
    int age;
};

main()
{
    Info a, b;

    a.name = "Kim";
    strcpy(a.kind, "Middle");
    a.age = 16;

    b = a;
    *b.name = 'C';    // 문자열 포인터는 포인터이므로 참조하는 구조체 전체 값이 변경됨
    b.age += 10;

    printf("%s %s %d\n", a.name, a.kind, a.age);
}

안녕하세요. 궁금증연구소 입니다.

오늘 포스팅 주제는 "[C언어] 구조체의 문자열포인터는 변경시 참조하는 모든 값이 변경됨" 입니다.

 

위와 같은 코드에서, b 구조체의 name 값 변경은 a구조체에도 영향을 준다. 

왜냐하면, name 구조체가 문자열 포인터이기 때문이다. 

 

반면, b구조체의 값에 10을 더해주어도 a구조체에는 당연히 영향이 없다. 각각 다른 구조체에 값이 저장되기 때문이다.

 

또한 *b.name 에서 연산자 우선순위는  .> * 이므로 위 코드의 의미는 b.name(포인터)의 첫번째 글자값을 뜻한다.

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading