본문 바로가기
프로그래밍/C, C++

[C언어] 구조체 포인터 .연산자 ->연산자

by JR2 2021. 1. 24.

구조체 포인터라고 해서 어렵게 생각할 필요가 전혀 없다.

보는 눈만 키워주면 되는 것이다.

 

구조체는 하나의 자료형이라고 생각하면 되기 때문에,

포인터를 선언할 때에도 똑같이 선언하면 된다.

 

struct 구조체이름* 포인터이름;

 

보통 구조체 내부에는 여러개의 자료형이 들어가있기 때문에

구조체를 일일히 선언해서 사용하기 보다 포인터로 주소를 할당에서 사용을 많이한다.

 

struct 구조체이름* 포인터이름 = malloc(sizeof(struct 구조체이름));

 

예제로 아래는 Hash의 insert 함수이다.

void insert(int key, int value){
    int hashIndex = hashFunction(key);
    struct node *newNode = createNode(key,value);

    if(hashTable[hashIndex].count == 0){
        hashTable[hashIndex].head = newNode;
        hashTable[hashIndex].count = 1;
    }

    else{
        newNode->next = hashTable[hashIndex].head;
        hashTable[hashIndex].head = newNode;
        hashTable[hashIndex].count++;
        
    }
    return;
}

 

구조체의 멤버에 접근하는 방법이 2가지인것을 확인할 수 있을것이다.

1. .연산자

2. ->연산자

 

그럼 이 둘의 차이점은 무엇이고 어떻게 활용되는것일까

 

(*구조체포인터).멤버 //포인터를 역참조 하여 .로 멤버로 접근

구조체포인터->멤버 // 화살표 연산자로 멤버에 접근

 

둘은 같은표현이다.

 

자세한 내용은 참고

dojang.io/mod/page/view.php?id=418

 

C 언어 코딩 도장: 49.1 구조체 포인터를 선언하고 메모리 할당하기

49 구조체 포인터 사용하기 보통 구조체는 멤버 변수가 여러 개 들어있어서 크기가 큰 편입니다. 그래서 구조체 변수를 일일이 선언해서 사용하는 것보다는 포인터에 메모리를 할당해서 사용하

dojang.io

댓글