コード:
#include <stdio.h>
struct DATA{
int id;
double height;
};
void in_data(struct DATA *ptr);
void main(void){
struct DATA stdata;
in_data(&stdata);
printf("ID=%d, height=%lf",stdata.id, stdata.height);
}
void in_data(struct DATA *ptr){
ptr->id = 101;
ptr->height = 165.5;
}
このプログラムについて質問です.
ptr -> id や ptr -> height のような表現はポインタを表していますよね? 実際,
コード:
printf("%p, %d", ptr->id, *(ptr->id) );
は正しく出力されますが,
コード:
printf("%d ", ptr->id );
は警告が出て,そのまま実行しても正しく出力されません.
しかし,最後の方の
という表現はなぜ正しいのでしょうか? ポインタならば
とするのが正しいと思いますが,これをコンパイルしようとすると,
error: invalid type argument of unary ‘*’ (have ‘int’)
*(ptr -> id) = 101;
とエラーが出てしまいました.
どなたか教えてくださると助かります.