プログラムの質問というより仕組みの質問です。**dis;と宣言した場合,disはポインタ型へのポインタですよね。**dis;は定義です。バグのないプログラムはない。プログラムは思ったとおりには動かない。**dis;は定義です。重隅かもしれませんが、ちょっと強く言い切ってしまってますので。基本的に定義というのは、記憶域の確保を伴う宣言の事です。通常、一般に変数は宣言と定義が同時に行われます。等の記憶クラス指定子といった、定義を伴わない宣言のみというのはありますが、原則としてその逆はあり得ません。ここで宣言ではありません。言い切ってしまうのは些か語弊があると思うのですが、どうでしょう。定義はみな宣言であるということがわかりました。よって、「定義であって宣言ではない」という前言を撤回いたします。バグのないプログラムはない。プログラムは思ったとおりには動かない。質問のコードはC++が指定されているので余談になってしまいますが、Cの外部変数だとこれまた純粋な定義と違うんですよね。質問のコードはC++が指定されているので余談になってしまいますが、Cの外部変数だとこれまた純粋な定義と違うんですよね。質問者さんが明示的にC++を指定されたかどうかは(今のところ)不明ですね。バグのないプログラムはない。プログラムは思ったとおりには動かない。+-------+枠一つがオブジェクト,またはサブオブジェクトです。,----->は「参照する」を意味し,=が左右にあるオブジェクトまたはサブオブジェクトが式の表すオブジェクトです。整形のためにcodeタグを使っています。**は二次元配列で使えるポインタではありません。(*)[]となります。[]内には定数を入れて下さい。余談ですが......。宣言と定義について,規格に言葉の定義が記述されています。Cにおいて,定義は一部の宣言のこと言います。that(以下列挙は省略)C++において,宣言は一部を除いて定義でもあります。...(列挙部省略)Cでは宣言のうちで定義であるものが列挙されていますが,C++では宣言のうちで定義でないものが列挙されています。ちなみに,省略した列挙には,CでもC++でもtypedefが挙がっています。Cではtypedefは定義になりますが,C++では定義になりません。注C++11が発行されているのでC++03は旧規格ですが,とりあえず旧規格から拾いました。n3242を見る限り,対象の段落の書き方に変化はありませんでしたが。ミクプラは自由にリンクできます。