-1
struct student_simple
 {
    int rollno;
    char *name; 
};

との差

struct student_simple *s2 = malloc(sizeof(struct student_simple *)); 

struct student_simple *s3 = malloc(sizeof(struct student_simple ));

s2 と s3 の両方を問題なく使用できますが、gdb でサイズを確認すると

gdb$ p sizeof(struct student_simple) gives 16 

gdb$ p sizeof(struct student_simple *) gives 8 
4

4 に答える 4

2

sizeof(struct student_simple *)へのポインターのサイズを指定しますがstudent_simplesizeof(struct student_simple )タイプ の構造体変数のサイズを指定しますstudent_simple

于 2013-04-23T06:05:06.563 に答える
2

[...] と [...] はどう違いますか?

アスタリスク記号。s2また、構造体の保存に使用しようとするとstudent_simple、未定義の動作が発生します。

s2 のように、サイズが 8 バイトの malloc に student_simple 構造体を格納するにはどうすればよいですか?

できません。なぜそれができると思いますか?

于 2013-04-23T06:03:58.133 に答える
1

sizeof(any_Structure_Pointer)コンパイラベースである 8 または 4 を指定します。ただし、sizeof(YOUR_Structure)構造内で宣言されているすべてのデータ型の追加のサイズを指定します。

疑問がある場合は、 で確認してくださいsizeof(int*), sizeof(void*)...。8または4を与える..

于 2013-04-23T06:04:31.020 に答える
1

未定義の動作は未定義です。正しい動作のように見えることを含め、あらゆることが起こる可能性があります。s3正しいフォームを使用してください。

于 2013-04-23T06:03:04.497 に答える