2017-10-19 10 views
0

これはおそらく以前に尋ねられた質問のように聞こえるでしょう - Cの配列とポインタの違いについて質問がありますが、どれもこの質問に答えるのに十分な情報を提供していません。C:intの2次元配列をint **に代入すると、CLIONがその行をハイライト表示するのはなぜですか?

私は、C配列の名前がメモリブロックの先頭へのポインタのように扱われていることを知っていますが、intの3 ​​x 3の2次元配列の名前をint **私が割り当てられたキャストでき

int x[3][3]; 
int **px = x; <-- warning here 

互換性のないポインタ型 'int型* *' と '[3] [3] INT':私のCLION IDEで、それは割り当てを強調して言います値を(int **)にして、ハイライトはもちろん外に出ますが、 - ちょっと - キャストできますCで楽しいものがたくさんあり、ハイライトが消えてしまいます。あなたが求めていることが働くことを意味しているわけではありません。

これは単なるCLION(または、おそらくより適切には、きちんとした整理)の問題ですか、それとも本当の問題ですか?

[編集]

いくつかの文脈では、配列/ポインタの違いの他のすべての答えと問題が理由です、** 3×3アレイは、int型ではないので、それらの多くは、」のようなものを言うということです! "ありがとうございますが、これはかなり無駄な情報です.3x3配列がintではないことを知っている人は既に知っています** - コンパイラは結果のint **を代入後どのように扱うのですか?配列かどうか?

+0

問題の行を投稿できますか? – Blacksilver

+4

2次元配列は、ポインタの配列ではない**です。そのためです。 –

+1

'int **'は 'int *'の連続したリストです。 'int [3] [3]'は、3つのintの3つの連続したリストの連続したリストです。 'int []'は配列の最初の要素のアドレスに解決することによって 'int *'に減衰しますが、それは推移的には動作しません。 – zneak

答えて

2

誰かが私を修正できますが、多次元配列はそうではないかもしれませんが、通常はポインタの配列として実装されていません。逆参照のためにいくつかの構文的な砂糖が付いた連続したメモリです。

詳細はthisを参照してください。

+0

ありがとう@ orhtej2 - どのように私はその答えを逃したのか分からない - それは完全に私の質問に答える。 –

+0

はい、しかし、 "構文的な砂糖"は 'int **'と互換性があります –

+0

@AntonMalyshevどうやって見ることができますか?私が提供したリンクはそうでないことを示唆している。 – orhtej2

関連する問題