2つの文字を変数に格納しポインタを利用した文字交換プログラムを作成しなさい, なお以下の実行結果も表示する。
「交換前1」と「交換後1」はprintf()関数の第2引数に変数を指定して結果を表示。
「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前4」と「交換後4」はprintf()関数の第2引数にアドレス演算子を利用して結果を表示。という問題があり、実行結果が↓
「交換前1」moji=S,moji1=A
「交換前2」moji=S,moji1=A
「交換前3」moji=(アドレス1),moji1=(アドレス)
「交換前4」moji=(アドレス1),moji1=(アドレス)
「交換後1」moji=A,moji1=S
「交換後2」moji=A,moji1=S
「交換後3」moji=(アドレス1),moji1=(アドレス)
「交換後4」moji=(アドレス1),moji1=(アドレス)
となるらしいです。交換1はできるのですが2,3,4が全く分かりません。
誰かソースコードを教えてください。
ポインタ アドレス
Re: ポインタ アドレス
そのままのコードは出したく無いので肝心の出力部分だけわかるようなC言語のコードを用意すると、
という感じでしょうか?
「第2引数」という条件があるので、第3引数でデータを指定してはいけないことに注意ですね。
#include <stdio.h>
int main(void) {
char a = 'A';
printf("1: %c\n", a);
printf("2: %.1s\n", &a);
printf("3: %p\n", (void*)&a);
printf("4: %p\n", (void*)&a);
return 0;
}
「第2引数」という条件があるので、第3引数でデータを指定してはいけないことに注意ですね。
オフトピック
なお、「C言語」という条件は無いことに注意。「C言語以外」という条件も無いが…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: ポインタ アドレス
> 「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
> 「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
この2つが全く同じ話に見えるのだけど…??
> 「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
この2つが全く同じ話に見えるのだけど…??
Re: ポインタ アドレス
「交換前1」と「交換後1」はprintf()関数の第2引数に変数を指定して結果を表示。
「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前4」と「交換後4」はprintf()関数の第2引数にアドレス演算子を利用して結果を表示
僕はこの意味がわからないので聞いたのですが恐らく
交換2は文字を交換して3は文字が入っているアドレスを交換するらしいです。
「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前4」と「交換後4」はprintf()関数の第2引数にアドレス演算子を利用して結果を表示
僕はこの意味がわからないので聞いたのですが恐らく
交換2は文字を交換して3は文字が入っているアドレスを交換するらしいです。
Re: ポインタ アドレス
東上☆海美☆「
#3>なぜ交換2文字列型の%sを使うのでしょうか?%cではだめなのですか?
#2> printf("2: %.1s\n", &a);
%.1s だから、文字列の最初の一文字だけ出力だったっけ ?
%c 使うなら か ?
#3> printf("交換後2moji1=%c,moji2=%c\n",moji1,*bp );だと*bpが第二引数と捉えていいんでしょうか?
第一引数 "交換後2moji1=%c,moji2=%c\n"
第二引数 moji1
第三引数 *bp
みみ。
」
#3>なぜ交換2文字列型の%sを使うのでしょうか?%cではだめなのですか?
#2> printf("2: %.1s\n", &a);
%.1s だから、文字列の最初の一文字だけ出力だったっけ ?
%c 使うなら か ?
#3> printf("交換後2moji1=%c,moji2=%c\n",moji1,*bp );だと*bpが第二引数と捉えていいんでしょうか?
第一引数 "交換後2moji1=%c,moji2=%c\n"
第二引数 moji1
第三引数 *bp
みみ。
」
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: ポインタ アドレス
#include<stdio.h>
int main(void)
{
char moji1 = 'A';
char moji2 = 'Z';
char tmp,*zp;
char *pa,*bp;
char *ptr = &moji1;
pa = &moji1;
bp = &moji2;
printf("交換前1moji1=%c, moji2=%c\n",moji1,moji2);
printf("交換前2moji1=%c, moji2=%c\n",moji1, *bp);
printf("交換前3moji1=%p, moji2=%p\n",pa,bp);
printf("交換前4moji1=%p, moji2=%p\n", &moji1,&moji2);
tmp = moji1;//交換1の処理
moji1 = moji2;
moji2 = tmp;
zp=&moji2;//交換3の処理
pa =&moji1;
bp = zp;
printf("交換後1moji1=%c, moji2=%c\n", moji1, moji2);
printf("交換後2moji1=%c, moji2=%c\n",moji1,*bp );
printf("交換後3moji1=%p, moji2=%p\n", pa, bp);
printf("交換後4moji1=%p, moji2=%p\n", &moji1, &moji2);
計4つの交換式が必要ですか?
途中までしてみたのですがここからなにをすればいいか分かりません。、、
どうすればいいですか、