ページ 1 / 1
ポインタ アドレス
Posted: 2022年11月15日(火) 22:13
by kiraas
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: ポインタ アドレス
Posted: 2022年11月16日(水) 00:08
by みけCAT
そのままのコードは出したく無いので肝心の出力部分だけわかるようなC言語のコードを用意すると、
コード:
#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言語以外」という条件も無いが…
Re: ポインタ アドレス
Posted: 2022年11月16日(水) 01:18
by kiraas
なぜ交換2文字列型の%sを使うのでしょうか?%cではだめなのですか?
また第二引数とは例えば
printf("交換後2moji1=%c,moji2=%c\n",moji1,*bp );だと*bpが第二引数と捉えていいんでしょうか?
ちなみに交換1は
コード:
printf("交換前1moji1=%c, moji2=%c\n",moji1,moji2);
tmp = moji1;
moji1 = moji2;
moji2 = tmp;
printf("交換後1moji1=%c, moji2=%c\n", moji1, moji2);
で交換できますよね?
Re: ポインタ アドレス
Posted: 2022年11月16日(水) 10:14
by usao
> 「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
> 「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
この2つが全く同じ話に見えるのだけど…??
Re: ポインタ アドレス
Posted: 2022年11月16日(水) 11:02
by kiraas
「交換前1」と「交換後1」はprintf()関数の第2引数に変数を指定して結果を表示。
「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前4」と「交換後4」はprintf()関数の第2引数にアドレス演算子を利用して結果を表示
僕はこの意味がわからないので聞いたのですが恐らく
交換2は文字を交換して3は文字が入っているアドレスを交換するらしいです。
Re: ポインタ アドレス
Posted: 2022年11月16日(水) 11:26
by あたっしゅ
東上☆海美☆「
#3>なぜ交換2文字列型の%sを使うのでしょうか?%cではだめなのですか?
#2> printf("2: %.1s\n", &a);
%.1s だから、文字列の最初の一文字だけ出力だったっけ ?
%c 使うなら
コード:
char* ptr = &a;
printf( "2: %c\n", *ptr );
か ?
#3> printf("交換後2moji1=%c,moji2=%c\n",moji1,*bp );だと*bpが第二引数と捉えていいんでしょうか?
第一引数 "交換後2moji1=%c,moji2=%c\n"
第二引数 moji1
第三引数 *bp
みみ。
」
Re: ポインタ アドレス
Posted: 2022年11月16日(水) 17:05
by kiraas
コード:
#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);
交換前と交換後の間に交換1に対する交換式、交換2に対する交換式、交換3に対する交換式、交換4に対する交換式
計4つの交換式が必要ですか?
途中までしてみたのですがここからなにをすればいいか分かりません。、、
どうすればいいですか、