- ベストアンサー
構造体の纏めの後について……。
以前、『構造体の纏め方』と言うタイトルで質問した者です。 早速本題に。 // --------------- 構造体・鋳型宣言 --------------- typedef struct tagABC { int Dog; int Cat; } ABC; // ----------------------------------------------- // --------------- 構造体実体宣言 ----------------- ABC Point1[ 20 ][ 20 ] = { { { 10 , 11 }, { 20 , 21 }, { 30 , 31 } },{ { 100 , 101 }, { 200 , 201 } } }, Point2[ 20 ][ 20 ] = { { { 1000 , 1001 }, { 2000 , 2001 } } }, /************************************************/ /* 『ココが難題!!』 */ /************************************************/ *DBase[] = { Point1[ 0 ] , Point2[ 0 ] }; // ----------------------------------------------- さて、呼び出し側のソースコードは、 Point1[ 1 ][ 0 ] とすれば、 { 100 , 101 } を返してくれます。 *以後、この値が欲しいとして話を進めます しかし、 ( DBase + 0 )[ 1 ][ 0 ] と呼び出した場合、突然予定通りの値を返してくれません。 (コンパイルとビルドは通る) デバッガでメモリ上を見てみると、期待している値(上記)を呼び出す為には、 ( DBase + 0 )[ 0 ][ 20 ] となっており、普通ならばアクセス出来ない場所を指定しなければならなく、とても不思議な現象が起こっています。 因みに、 ( DBase + 0 )[ 1 ][ 0 ] と指定すると、結果的には、 Point2[ 0 ][ 0 ] を参照しているのと同じ現象が起こります。 この現象をどうにかして二次元配列で期待した値を呼び出せる方法を御教授御願いします。 使用コンパイラ:BCC 5.5.1
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- 構造体について
私は今プログラミング(C++)を勉強しているのですが、構造体に苦戦しています。分からないことがいくつかあります。もし知っていたらどれでもいいですので、よろしければ教えてください。 1、たとえば構造体を宣言するときに struct abc{ int s; struct abc xx; struct abc yy; }; と宣言するときがあります。でも上記の例と下記の例との違いが分かりません。 struct abc{ int s; struct abc xx; struct abc yy; }abc; 2、たとえばメインの最初にこのように宣言されているとします。 int j, i; struct abc *kk, *nn, *mm; これはここに宣言したものがローカルで、1のときに宣言したものがグローバルと考えていいのでしょうか? 3、メインの中に次のようなプログラムがあったとします。 kk->xx = j; kk->yy = j; nn->yy = NULL; i = kk->xx; i = kk; これらがそれぞれどのような意味があるのでしょうか。 これらでわかることがあればぜひ教えてください。よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- C#で構造体の配列を持った構造体を使いたいのですが
C#で構造体の配列を持った構造体を使いたいのですが Cならば struct xyz { struct abc _abc[32]; int index; }; struct abc { int a; int b; int c; }; struct xyz _xyz[8]; xyz[0]._abc[3].b = 1; のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません うまくやる方法をどなたかご存知ないでしょうか Visual Studio 2005行った場合 コンパイルで 構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します となり fixed をつけると 固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double となってしまいます
- ベストアンサー
- C・C++・C#
- 構造体の構造体配列初期化
typedef strunct _test01 { int a; int b; } test01_t; typedef strunct _test { int c; test01_t sTest01[256]; } test_t; test_t sTest; 上記のような構造体がある場合、sTestのメンバのsTest01をNULL初期化する 方法とsTest01に値が入っていないか(初期化されているか)を判定する方法を 教えていただけませんか? よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- 構造体について
構造体についての質問です。 main関数で構造体に 格納しています。 その構造体の値を 自作の関数(look)で 参照したいのですが どのようにすればいいのか ご教示して頂けたら幸いです。 typedef struct nentbl_ { int tosi; int kan; } nentbl; //--------------------------------------------------- int look(id){ nentbl kihokyu[50]; printf("%d %d\n",kihokyu[id].tosi , kihokyu[id].kan); } //---------------------------------------------------- int main(void){ nentbl kihokyu[50]; ・ ・ ・ kihokyu[1].tosi =11; kihokyu[1].kan = 20; kihokyu[2].tosi = 21; kihokyu[2].kan = 30; kihokyu[3].tosi = 31; kihokyu[3].kan = 40; y = look(1);
- ベストアンサー
- C・C++・C#
- 構造体・ビットフィールドのvolatileに関して。
以下のような構造体があったとする。 -(1) ----------------------------- typedef volatile struct ABC{ char x; char y; }stABC; -(2) ----------------------------- typedef struct ABC{ volatile char x; volatile char y; }stABC; --------------------------------- ■質問 ------------- stABC abc; abc.x // ←volatileは有効? abc.y // ←volatileは有効? ------------- ・このとき、メンバx,y は(1)/(2)の構造体型宣言どちらでも 同じ意味合いになっているのでしょうか。 ※特に(1)の場合、volatileは有効になっているのでしょうか。 ・ビットフィールド時も同じと考えて問題ないでしょうか。 (1)typedef volatile struct ABC{ char x: 1 ; char x: 7 ; }stABC; (2)typedef struct ABC{ volatile char x: 1 ; volatile char x: 7 ; }stABC;
- 締切済み
- C・C++・C#
- 入れ子の構造体について
例えば、入れ子の構造体を1つ使いたい場合、 struct bbb{ int b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; と書くと、「dt.a.b = 10」とやれば、値等を設定できると思いますが、 入れ子の構造体を2つ使いたい場合も、同じように書けるのでしょうか? struct ccc{ int c; }; struct bbb{ struct ccc b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; dt.a.b.c = 10; と書けるのでしょうか?こんがらがってしまって、どう書いていいのか・・。 2つでも出来るのであれば、コードの書き方を教えて頂けませんか?
- ベストアンサー
- C・C++・C#
- 構造体メンバへの代入
とても初歩的なことなのですが、 typedef struct _X{ int x; }X[50]; と構造体を定義して X[0].x = 0; と0を代入しようとすると、「宣言が正しく終了していない」とエラーが出てしまいます。 これはなぜでしょうか? ちなみにMicrosoft Visual C++ 2005 Express Editionを使っています。
- ベストアンサー
- C・C++・C#
- ヘッダファイルと構造体
typedef struct{ float x; float y; float z; }Point; typedef struct { struct Point p1; struct Point p2; }Rect; とヘッダファイルに入力しコンパイルしてみると struct Point p1; struct Point p2; のPointが未定義の構造体とエラーが出ます。 どのように書けばいいのでしょう??
- ベストアンサー
- C・C++・C#
お礼
回答、有難う御座います。 上記のヒントから、ちょちょっと手直ししたら、満足の行く動きをしてくれました。 どうも有難う御座いました!