こんばんは。
Visual C++ 2008 Express Edition を使っています。
C++のあるプログラム内の関数で、構造体の1次元配列のポインタを引数に取ろうと思っているのですが上手くいきません。
関数の目的としては、関数側と呼び出す側のファイルを分けているので、関数側のグローバルな構造体配列のアドレスに呼び出し側の構造体配列のアドレスを代入することです。
構造体はExampleと型を定義してあります。
・関数側
Example *global_ex[10];
void GetEx(Example *ex[]) // ←2つ目のエラー
{
global_ex = ex; // ←1つ目のエラー
}
・呼び出し側(呼び出し側の関数内)
Example ex[10];
(exの初期化)
GetEx(&ex);
・エラー
error C2440: '=' : 'Example *[]' から 'Example [15]' に変換できません。配列型への変換はありませんが、参照またはポインタから配列への変換があります。
error C2664: 'GetEx' : 1 番目の引数を 'Example (*)[15]' から 'Example *[]' に変換できません。
プログラムとエラーは以上です。
何をすれば解決できるのか、ご存じの方いらっしゃいましたらよろしくおねがいします。
CとC++は独学で学んでいるので偏りがあると思います。
「基本的な○○が分かっていないのでは?」と感じたらその点もご指摘頂けると嬉しいです。。
No.1ベストアンサー
- 回答日時:
とりあえず、やりたいことは、
・関数側
Example *global_ex; // [10]をとる
void GetEx(Example *ex) // []をとる
{
global_ex = ex;
}
・呼び出し側(呼び出し側の関数内)
Example ex[10];
(exの初期化)
GetEx(ex); // &を取る
と直せばできるんでしょう。
>「基本的な○○が分かっていないのでは?」と感じたらその点もご指摘頂けると嬉しいです。。
そうですね。配列とポインタの関係をもう一度、見直してみたらと思います。確かに混乱しやすいんですが。
できました!
ポインタだけにすると良かったんですね。。
はい、こういう考えにすぐたどりつけるよう、もう一度配列とポインタの関係を見直してみようかと思います。
ありがとうございました^^
No.2
- 回答日時:
手元に環境がないので適当ですが
Example (*global_ex)[10];
Example (*ex)[]
では、ダメですかねぇ。
[]演算子より*演算子の方が優先度が低いようなので。
この回答への補足
すみません、本文で少し訂正するところがあったので、場所をお借りします。
【訂正】
最後のエラーの配列で [15] となっているのは [10] の間違いです。
これでもやはり[]と[10]とで型が違うといわれてしまいました^^;
*や[]の優先度については考えていなかったので、これからそういう面でも見ていこうかと思います!
ありがとうございました^^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# c言語 配列とポインタについて 3 2023/02/09 22:53
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) FORTRAN77の配列(除算) 2 2023/02/01 14:34
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の再初期化
-
先頭アドレスとは何ですか?
-
シグマの計算
-
C言語 配列の長さの上限
-
配列をEraseしてもメモリが開放...
-
.net 2010VB配列TextBox貼り付ける
-
C言語について質問お願いします...
-
Excel関数でのコロンの使い方
-
ミャンマー語の文字がない。
-
配列とその要素数をメンバにも...
-
C++ vectorに配列をプッシュしたい
-
FORTRANとC言語のデー...
-
C言語のプログラムについての質...
-
RGB値を画像(PNG・BMPJPEGなど)...
-
教えてください。 配列とポイン...
-
【速いブラインドタッチ】手を...
-
C++を本で独学してますが、配列...
-
C言語のint (*)[5]型と参照につ...
-
本日までの累計を表示させたい!
-
配列の参照渡しで型が一致しま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
unsigned char配列への入力の仕方
-
ExcelVBAで質問です。離れた二...
-
配列の参照渡しで型が一致しま...
-
パイソンの
-
C# Listを使わずに2次元配列の...
-
C言語で特定列だけを抽出して配...
-
複数の選択範囲の行番号を個別...
-
【C言語】配列の中に配列を入れ...
-
メモリの初期値
-
VBで構造体の配列を関数に渡す...
-
Excel、VBAのユーザーフォーム...
-
配列をEraseしてもメモリが開放...
-
2次元配列を戻り値とする関数?
-
【速いブラインドタッチ】手を...
おすすめ情報