0

ポインターを使用して動的に初期化することは可能ですが、構造体定義の直後ですか? 例でお願いします。私はそれを試しましたが、試してみると例外が発生しますcout << a->val << endl;

#include "stdafx.h"
#include <iostream>

using namespace std;


struct A{
public:
    int val = 0;
    A(){}

}*a,b,c;

int _tmain(int argc, _TCHAR* argv[]){

    cout << a->val << endl;//EXCEPTION
    cout << b.val << endl;
    int x;
    cin >> x;
    return 0;
}
4

2 に答える 2

1

あなたのコード

struct A{
public:
    int val = 0;
    A(){}
}*a,b,c;

構造体を定義し、 3 つのグローバル変数 、、をA宣言ます。abc

aタイプ 'A*' です。つまり、タイプ へのポインタAbあり、タイプcインスタンスですA

単純な基本型 (int、ポインターなど) のグローバル変数のデフォルトは 0 です。

結果は次と同等です。

struct A{
public:
    int val = 0;
    A(){}
};
A* a = NULL;
A b;
A c;

その後、コードaが値を割り当てずに使用しようとすると、NULL ポインターを逆参照してクラッシュします。

于 2013-11-13T01:54:01.663 に答える