아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
은혜로운왈라비232
은혜로운왈라비23219.06.12

C 구조체 pointer 관련 질문입니다.

#include<stdio.h>

typedef struct node {

int data;

}IncStim;

int main() {

IncStim * tmp = 0;

printf("input_data :");

scanf("%d", tmp->data);

printf("%d", tmp->data);

}

구조체 포인터에서 입력할 때 scanf에서 &address 로 사용하지 않는걸로 알고 있는데..

입력이 되지 않네요.. 뭐가 문제일까요?

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • IncStim* temp는 실제 IncStim이 아닌 IncStim 구조체를 가리킬수 있는 temp라는 이름의 포인터를 설정한것입니다. 쉽게 말하면 IncStim이라는 구조체의 주소를 위한 변수입니다.

    IncStim 구조체란 것을 가리키고 값을 '0'을 넣어서 아무것도 가리킬수 없습니다.

    만약 사용하고 싶으시다면 IncStim Temp; 정적으로 만들어 temp = &Temp; 지정(연결) 후 사용하던지

    혹은 동적으로 tmp = (Stack*)malloc(sizeof(Stack)); 으로 실질적인 값을 만들어서 사용해야 합니다.


  • scanf에는 값을 입력받을 주소를 인자로 넘겨야 합니다.

    %s는 이미 첫번째 문자열의 주소이기 때문에 따로 &를 붙이지 않지만
    그 외에는 이미 포인터가 아닌 이상 항상 &를 붙인다고 보면 되겠습니다.

    scanf("%d", &tmp->data); printf("%d", tmp->data);