0
#include<stdio.h>
#define STORAGESIZE 5
#define MAX_NAME_LEN 2

typedef struct{
      char name[MAX_NAME_LEN];
      char feild1;
      char feild2;
  } strt;
  static strt storage[5];

main(){
 unsigned char *stp=(unsigned char*)&strt;
 unsigned char*stp_end=(unsigned char*)(&strt+STORAGESIZE);
 int i;

 for(i=0;stp!=stp_end;stp++,i++)
   printf("byte%d: %x\n",i,*stp);

}

おそらくパディング部分を除いて、静的として宣言されたすべての構造が0に初期化されることを確認しようとしています。上記をコンパイルしようとするとエラーが発生しました: statictable.c:

In function 'main':
statictable.c:13:38: error: expected expression before 'strt'
statictable.c:14:42: error: expected expression before 'strt'


キャストされたポインターを別のポインターに割り当てる際に何が間違っている可能性がありますか。これは初歩的なものになる可能性があることはわかっていますが。

4

2 に答える 2

4

行で:

unsigned char *stp=(unsigned char*)&strt;

strt変数ではなく型であるポインタを指定します。iIt's like &int(invalid as :) ), あなたはおそらくそうするでしょう:

unsigned char *stp=(unsigned char*)storage;

次の行も同じです。

于 2012-08-06T04:50:55.137 に答える
1

次の 2 行で:

unsigned char *stp=(unsigned char*)&strt;
unsigned char*stp_end=(unsigned char*)(&strt+STORAGESIZE);

タイプ:のアドレスを取得しようとしていますstrtstrt配列のアドレスが必要です: storage.

于 2012-08-06T04:51:15.107 に答える