次のコードは正常に機能します。
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct node{
int a, b, c, d, e;
};
struct node *ptr = NULL;
printf("Size of pointer ptr is %lu bytes\n",sizeof (ptr));
printf("Size of struct node is %lu bytes\n",sizeof (struct node));
ptr = (struct node*)malloc(sizeof (ptr)); //Line 1
// ptr = (struct node*)malloc(sizeof (struct node)); //Line 2
ptr->a = 1; ptr->b = 2; ptr->c = 3; ptr->d = 4; ptr->e = 5;
printf("a: %d, b: %d, c: %d, d: %d, e: %d\n",
ptr->a,ptr->b,ptr->c,ptr->d,ptr->e);
return 0;
}
次のように準拠した場合:
gcc -Wall file.c
私の質問は:なぜこれでいいのですか?
malloc
引数で指定されたバイト数を割り当てます。これが私sizeof ptr
の64ビットLinuxマシンの8バイトです。私は8バイトを提供すると思いmalloc
ましたが、それではどのようにしてすべての変数a、b、c、d、eにアクセスしますか?それはgccだけでしょうか、それとも標準Cで何かが足りないのでしょうか?
私の知る限り、「Line1」の代わりに「Line2」があるはずですが、どちらの行も問題なく動作します。なんで?