struct と typedef struct を徹底的に理解する
//第1章 転載 ==========================================================================================================================
struct と typedef struct は徹底的に理解されている
転載先
https://www.cnblogs.com/qyaizs/articles/2039101.html
struct と typedef struct
これは3つに分けて語られる。
1 はじめに // CとC++の違いに注意
C言語では、typedefで構造体型を定義します。
typedef struct Student
{
int a;
}Stu;
だから、変数を宣言するときに、できる。Stu stu1; (typedefがない場合はstruct Student stu1;で宣言する必要があります)
ここでStuはstruct Studentの別名です。stu==struct Student
また、ここではStudentを省略することができます(つまり、Student stu1;を構造化することはできず、Stu stu1;とする必要があります)。
typedef struct
{
int a;
}スチュ
しかし、c++では単純に、直接
構造体Student
{
int a;
};
** そして、Studentという構造体が定義され、Student stu2という変数が直接宣言されています。
======================================================================================**
2. 第二に
c++ではtypedefが使用されている場合、それは再びの違いを作る。
typedef struct
を使用すると、stu1.a に直接アクセスすることができます。
しかし、stu2 の場合は、まず stu2 s2 が必要です。
**then s2.a=10;
======================================================================================**
3 上の2つをマスターすれば十分なのですが、最後にあまり重要でない問題を探ります
cプログラムで、次のように書くとします。
{
これは何としてカウントされるのでしょうか?
コンパイラ(VC6)を観察しての個人的な理解では、これは以下のものと同等だと思います。
typedef struct
{
int numです。
int ageを指定します。
}aaa.
typedef aaa bbb;
typedef aaa ccc;
これは、aaa, bbb, cccがすべてstruct型であることを意味します。変数を宣言するときには、どれを使ってもいいわけで、これはC++でも同じです。しかし、c++でtypedefキーワードを書き飛ばすと、aaa, bbb, cccは3つの全く異なるオブジェクトになることに注意する必要があります。
// ここではあまり理解されていません。
typedef structとstructの違い。
int a;
上のタグMyStructが識別子、MyStructが変数の型((int,char,など)に相当)です。
この文は、実際には2つの操作を実現している。
1) 新しい構造体型を定義する
}Stu;
解析:tagMyStructは"tag"と呼ばれていますが、実はこれは仮の名前で、typedefstructキーワードとtagMyStructを合わせて構造体の型を構成してもしなくても、構造体は存在するのです。
struct tagMyStruct varName を使って変数を定義することができますが、struct と tagMyStruct を合わせて struct 型を表すので、tagMyStruct varName を使って変数を定義するのは正しくないことに注意しましょう。
2) typedef は、この新しい構造体に MyStruct という名前をつけます。
typedef struct tagMyStruct MyStruct;
つまり、MyStructは実際にはstruct tagMyStructと同等であり、MyStruct varNameを使って変数を定義することができるのです。
2.
But in c++ it's as simple as directly
C言語では、このアサーションの後に構造体変数を要求する方法が2つあります。
(1) struct tagMyStruct 変数名
(2) MyStruct変数名
c++では、以下のようになります。
(1) struct tagMyStruct 変数名
(2) MyStruct変数名
(3) tagMyStruct変数名
// 第2章 オリジナル ==================================================================================================================================
typedef は構造体ポインタの新しい型を定義し、この新しい型を使って、そのような構造体を指す構造体ポインタ変数を定義しますが、その正しい定義方法については、後述します。
問題の原因:i2c_controller.c で、2440 の i2c コントローラを登録する際、 register_i2c_controller(p_i2c_controller *p) で、フォームパラメータを p_i2c_controller p にできないのか、 p_i2c_controller controller はポインタとして定義されていますよね?
登録された2つの関数を見ると
struct Student
{
VC++ 6.0での構造体ポインタの実行結果について。
int a;
};
関連
-
undefinedMakefile:***セパレータがありません。
-
すでに#.objで定義されているものを修正する。
-
デバッグエラー MSB3073: :VCEnd がコード Solution で終了した
-
複数形使用時:'**'の前にイニシャライザを置く解決策を期待。
-
エラーが発生しました。#79: 型指定子が必要です
-
Cエラー:構造体でも組合でもないものにメンバ 'xxx' を要求しています。
-
Linuxプログラムにおけるセグメンテーションフォールト(コアダンプ)の一般的な解決方法
-
C C++プログラムのランタイムプログラムは、書き込みエラーのためにDebug/1.exeを開くことができません。
-
0xffffffとは何ですか?
-
警告: 非推奨の文字列定数から 'char *' への変換[-Write-strings] 解決法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
エラー LNK2005: _main は first.obj で既に定義されています。
-
Cプログラムの単純なエラー [エラー] ldは1終了ステータスを返した
-
エラーが発生しました。#852: 式は完全なオブジェクト型へのポインタでなければならない
-
free(): 次のサイズが無効 (fast): 0x0000000000aa4430 問題あり
-
libstdc++-6.dll が見つからないため、コードの実行を継続できません。プログラムを再インストールすると、この問題が解決する場合があります。
-
Cコンパイル警告:代入がキャストなしで整数からポインタを作成する
-
変数、配列、構造体におけるC言語の代入
-
c 言語エラー警告: 複数文字文字定数