- ベストアンサー
関数に文字列を渡すことについて
参考書にあったプログラムなのですが、 ------------------------------------------- #include<stdio.h> void strout(char ss[ ]); int main(void) { char st[ ]="ABCDEF"; strout(st); strout("ABab12"); return 0; } void strout(char ss[ ]) { int i; printf("ss=%s\n",ss); i=0; while(ss[i]){ printf("%X ",ss[i]); ++i; } printf("\n"); } ---------------------------------------------- ------------実行結果--------------- ss=ABCDEF 41 42 43 44 45 46 ss=ABab12 41 42 61 62 31 32 ----------------------------------- 初心者という事で、いろいろと疑問があるのですが、 ◎1「stとして、文字配列をss[ ]に渡すのと、"ABab12"として直接文字列をss[ ]に渡すのはとは、どういうことなのかということ。そしてその時ss[ ]はどうなっているか?」 ◎2「実行結果で、最初のprintfからループさせなくてもss=ABCDEF、ss=ABab12が何故2つとも表示され、2つとも16進数が表示されるのか?」 ◎3「while(ss[i])だけで何故、'\0'でない間ループするという事が出来てしまうのか?」 以上のような疑問があります。 先頭のアドレスを渡すといったような説明はあるのですが、いまひとつ分かりません。 教えていただけると嬉しいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- aris-wiz
- ベストアンサー率38% (96/252)
- chie65536(@chie65535)
- ベストアンサー率44% (8812/19981)
- Hardking
- ベストアンサー率45% (73/160)
お礼
>ssはstの配列の一番最初の場所を示す値で初期化されこの関数を抜けるときssは破棄され、また、strout("ABab12");の呼び出しで、"ABab12"の一番最初の場所を示す値で初期化され、関数を抜けるとき破棄されます。 これは、ssが2回以上初期化されたといった、エラーが出ないのは、「関数を抜けるときssが破棄される」からといった感じだからでよいのでしょうか?