アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

授業でC原語を習っており、その課題で詰まった所についての質問です。
※以下の関数については可能な限り簡略化しています。


typedef struct {
  char name[10];
  int height;
} Person;

Person *bin_search( const Person *key)
{
  return (&key);
}


以上のような構造体と関数があった場合、bin_searchでkeyを返したいのですが、
return (&key);
では、コンパイルするとその行について
return from incompatible pointer type
warning: function returns address of local variable
とエラーが出てしまいます。

return (key);
return (*key);
などとりあえず試してはみたのですがどれも上手くいきません。

そもそも関数名の前に*(間接演算子?)があること自体がよくわかっていないです……

なので、返り値をどうすれば正しく機能してくれるのか教えていただけるとありがたいです。


※課題で指定されているので、関数頭部については変更しないとします。

A 回答 (12件中11~12件)

その「bin_search」とやらは何をする関数なんでしょうか?



ことと次第によっては「bin_searchでkeyを返したい」が既にはずれである可能性もあります.

この回答への補足

元は、ライブラリ関数のbsearchを自作しようというものでした。
仮引数もいくつかありましたが、最終的にはkey(と同じ構造体の配列)を返せればよいので、このような形にしました。

補足日時:2012/05/24 13:05
    • good
    • 0

>return (key);


>などとりあえず試してはみたのですがどれも上手くいきません。
とありますが「return (key);」の場合「const*」を「*」に変えたというワーニングがでるだけで正しく動くと思いますが?どういった風に上手く行かなかったのでしょうか?

keyには構造体のアドレスが入っています、関数の返却値も同一構造体のアドレスです。そのままkeyを返せば良いだけです。

この回答への補足

「return (key);」の場合、
return discards qualifiers from pointer target type
という警告文が表示されました。
これが、そのワーニングにあたるのでしょうか?

補足日時:2012/05/24 16:40
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
おかげでプログロムは無事実行することが出来ました。

お礼日時:2012/05/25 16:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!