掲示板ランキング  システムユーティリティ(デスクトップアクセサリ)


掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7135

戻り値がポインタ
投稿者---雑魚丸(2007/02/18 23:33:56)
なし


#include <stdio.h>
char *str_chr(const char *str,int c);

main(){
const char *str[2] = {"abcd","efg"};
int c=0;
*str_chr(str[c],c);
}

char *str_chr(const char *str,int c){
  return ???;
}

の場合???に処理後str[0]の先頭アドレスを返したいのでためしに str[0]としたらエラーがでました...対策を教えていただければと思います。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:戻り値がポインタ 7136 επιστημη 2007/02/18 23:49:37
<子記事> Re:戻り値がポインタ 7138 ゆか 2007/02/19 13:25:39


No.7136

Re:戻り値がポインタ
投稿者---επιστημη(2007/02/18 23:49:37)
http://blogs.wankuma.com/episteme/


>char *str_chr(const char *str,int c){
>  return ???;
>}
>
>の場合???に処理後str[0]の先頭アドレスを返したいのでためしに str[0]としたらエラーがでました...対策を教えていただければと思います。

return str; あるいは return &str[0]; となりますが、ヤバくありませんか?
const char* を返すならともかくも、constを外しちゃあかんでしょ。




この投稿にコメントする

削除パスワード

No.7153

Re:戻り値がポインタ
投稿者---たかぎ(2007/02/21 01:02:47)
http://takagi.in/


>const char* を返すならともかくも、constを外しちゃあかんでしょ。

気持ち悪いのは確かですが、標準関数のstrchrなどもそうなので一概に悪いともいいきれません。
constを付けたままにすると、(constのない)char*型の実引数を渡した場合でも、返却値をconst char*で受け取らなければならなくなります。あるいは、呼び出し側でconstを外すか。
呼び出し側の責任で対応してもらう方が安全との見方もありますが、利便性とのトレードオフのような気もします。




この投稿にコメントする

削除パスワード

No.7138

Re:戻り値がポインタ
投稿者---ゆか(2007/02/19 13:25:39)


> *str_chr(str[c],c);

関数を最初から勉強したほうが良いと思う。


この投稿にコメントする

削除パスワード

No.7141

Re:戻り値がポインタ
投稿者---RiSK(2007/02/20 08:13:23)


>> *str_chr(str[c],c);
>
>関数を最初から勉強したほうが良いと思う。

正しい関数の呼出しです。
暗黙の型変換について勉強した方が良いと思う。

# * をつける必要がないのは確かですが。


この投稿にコメントする

削除パスワード

No.7155

Re:戻り値がポインタ
投稿者---たかぎ(2007/02/21 01:25:04)
http://takagi.in/


>>> *str_chr(str[c],c);
>>
>>関数を最初から勉強したほうが良いと思う。
>
>正しい関数の呼出しです。
>暗黙の型変換について勉強した方が良いと思う。

暗黙の型変換は関係ないと思いますが...。
暗黙の型変換が行われているところを強いてあげるなら、関数型であるstr_chrから関数へのポインタ型に暗黙の型変換が行われていることぐらいです。(関数呼出し演算子は、オペランドに関数へのポインタを要求するので)

# こんなのは知らなくても困らないと思うけど


この投稿にコメントする

削除パスワード

No.7161

Re:戻り値がポインタ
投稿者---RiSK(2007/02/21 08:47:40)


>>暗黙の型変換について勉強した方が良いと思う。
>
>暗黙の型変換は関係ないと思いますが...。

ぁ...

>暗黙の型変換が行われているところを強いてあげるなら、関数型であるstr_chrから関数へのポインタ型に暗黙の型変換が行われていることぐらいです。(関数呼出し演算子は、オペランドに関数へのポインタを要求するので)
(*str_chr)(str[c],c);
↑これと勘違いしました。

># こんなのは知らなくても困らないと思うけど
(************************************************str_chr)(str[c],c);
これが正常な関数の呼出しってことは
確かに知らなくても困りませんね。


この投稿にコメントする

削除パスワード

No.7163

Re:戻り値がポインタ
投稿者---たかぎ(2007/02/21 09:04:56)
http://takagi.in/


> (************************************************str_chr)(str[c],c);
> これが正常な関数の呼出しってことは確かに知らなくても困りませんね。

いや、そうではなくて、str_chr(str[c],c) が実は ((char*(*)(const char*,int)str_chr)(str[c],c) だということを知らなくても困らないということです。



この投稿にコメントする

削除パスワード

No.7165

Re:戻り値がポインタ
投稿者---ゆか(2007/02/21 17:07:12)


すみません、そうじゃなくて、
戻り値を使うつもりがないなら、
「何をreturnすればいいか」なんて悩まなくても、
voidにしておけばかんたんじゃん、と思っただけで・・・。
言葉が足りなくてすみません。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ