掲示板利用宣言

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

 私は

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

掲示板2

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

No.29130

内部関数での値の渡し方について
投稿者---こう(2006/12/04 11:47:24)


初歩的な質問ですみません。

以下の様に、内部の関数に値を渡してファイルに出力しています。
この時、値を渡す際、変数の格納してアドレスで渡すのではなく、
直接、渡したい値、つまり、文字列を記述して、渡しています。

教えて頂きたいのは、
直接、文字列を指定してもなぜ、上手く渡せるのかということなの
ですが。
アドレスを指定しているのと同じなのでしょうか。

環境
Solaris8
コンパイル
gcc

初歩的なことですみません。



#include <stdio.h>

FILE *log_fp;

void log_output(int,char *,char *,char *);

main()
{
    log_fp = fopen("kekka.log","w");
    if (log_fp == NULL) {
        printf("File Open Error\n");
    }

    log_output(-1,"test","起動に失敗","パラメータエラー");

    fclose(log_fp);
}

void log_output(int code,char *msg1,char *msg2,char *msg3)
{
    fprintf(log_fp,"ERR_CODE [ %d ] MESSAGE [%s %s %s]\n",code,msg1,msg2,msg3);
}




この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:内部関数での値の渡し方について 29133 RiSK 2006/12/04 12:02:02


No.29133

Re:内部関数での値の渡し方について
投稿者---RiSK(2006/12/04 12:02:02)


>直接、文字列を指定してもなぜ、上手く渡せるのかということなの
>ですが。
>アドレスを指定しているのと同じなのでしょうか。

文字列リテラルは暗黙のうちに静的なブジェクトとして宣言されたと見なされます。

// (1)
main()
{
    log_fp = fopen("kekka.log","w");
    // :
}

は

// (2)
main()
{
    static const char tmp1[]="kekka.log";
    static const char tmp2[]="w";
    log_fp = fopen(tmp1,tmp2);
    // :
}

と同じです。

んでもって,配列が先頭要素へのポインタになるので

// (3)
main()
{
    static const char tmp1[]="kekka.log";
    static const char tmp2[]="w";
    log_fp = fopen(&tmp1[0],&tmp2[0]);
    // :
}
と同じです。


(1) -> (3)をまとめて書くと
main()
{
    log_fp = fopen(&"kekka.log"[0],&"w"[0]);
    // :
}

と同じであることが分かります。



>初歩的なことですみません。

初歩的なの???



この投稿にコメントする

削除パスワード

No.29134

Re:内部関数での値の渡し方について
投稿者---RiSK(2006/12/04 12:06:40)


typo.ごめん。

>文字列リテラルは暗黙のうちに静的なブジェクトとして宣言されたと見なされます。

文字列リテラルは暗黙のうちに静的なブジェクトとして宣言されたと見なされます。



この投稿にコメントする

削除パスワード

No.29140

Re:内部関数での値の渡し方について
投稿者---こう(2006/12/04 20:41:25)


ありがとうございます。

log_output()の関数での引き渡しも同じことなのですか。
同じ考え方ということですか。


この投稿にコメントする

削除パスワード

No.29141

Re:内部関数での値の渡し方について
投稿者---RiSK(2006/12/04 22:49:43)


>log_output()の関数での引き渡しも同じことなのですか。
>同じ考え方ということですか。

# 納得してるのか,疑問なのか分からない…。

別に「引き渡し」とやらに限った話ではないです。
ほぼどこで文字列リテラルが現れようと同じ考え方です。


この投稿にコメントする

削除パスワード

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