구조체 포인터라고 해서 어렵게 생각할 필요가 전혀 없다.
보는 눈만 키워주면 되는 것이다.
구조체는 하나의 자료형이라고 생각하면 되기 때문에,
포인터를 선언할 때에도 똑같이 선언하면 된다.
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. ->연산자
그럼 이 둘의 차이점은 무엇이고 어떻게 활용되는것일까
(*구조체포인터).멤버 //포인터를 역참조 하여 .로 멤버로 접근
구조체포인터->멤버 // 화살표 연산자로 멤버에 접근
둘은 같은표현이다.
자세한 내용은 참고
'프로그래밍 > C, C++' 카테고리의 다른 글
[C언어] ' " ! @ # $ % ^ & * ( ) 출력하기 (0) | 2021.04.01 |
---|---|
[C#] ToInt, Convert to int (0) | 2021.03.21 |
[C언어] 구조체란 무엇인가. (0) | 2021.01.19 |
[C언어] typedef 이란 무엇인가 (0) | 2021.01.19 |
[C언어] 배열포인터와 포인터배열의 차이 (0) | 2021.01.16 |
댓글