現在『詳説Cポインタ』を読んでおり、その途中で1つ疑問が出てきたので質問をします。
p.168にてEmployee構造体
C
1typedef struct _employee{ 2 char name[32]; 3 unsigned char age 4}Employee;
へのポインタemployeeを宣言し、リンクリストで作ったスタックから
C
1employee = (Employee*)pop(stack);
として、データを取り出しています。
popはstackが空の場合NULLを返します。
3つのEmployee型のデータをpushし、for文で4回上記の式を実行して
C
1printf(″Popped %s¥n″, employee->name);
とすると、
Popped 名前1
Popped 名前2
Popped 名前3
Popped (null)
となるのですが、下のようなプログラムを書くと(null)とはならずSegmentation fault(コアダンプ)になります。
何が違うんでしょう?
C
1int main(void) 2{ 3 Employee *employee = NULL; 4 printf(″employee : %s¥n″, employee->name); 5 return 0; 6}
また、下のプログラムは(nil)となります。
(nil)と(null)の違いも教えていただけるとありがたいです。
C
1int main(void) 2{ 3 int *p = NULL; 4 printf(″%p¥n″, p); 5 6 return 0; 7}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。