ポインタ アドレス

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kiraas

ポインタ アドレス

#1

投稿記事 by kiraas » 1年前

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が全く分かりません。
誰かソースコードを教えてください。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: ポインタ アドレス

#2

投稿記事 by みけCAT » 1年前

そのままのコードは出したく無いので肝心の出力部分だけわかるような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言語以外」という条件も無いが…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kiraas

Re: ポインタ アドレス

#3

投稿記事 by kiraas » 1年前

なぜ交換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);
で交換できますよね?

アバター
usao
記事: 1889
登録日時: 11年前

Re: ポインタ アドレス

#4

投稿記事 by usao » 1年前

> 「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
> 「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示

この2つが全く同じ話に見えるのだけど…??

kiraas

Re: ポインタ アドレス

#5

投稿記事 by kiraas » 1年前

「交換前1」と「交換後1」はprintf()関数の第2引数に変数を指定して結果を表示。
「交換前2」と「交換後2」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前3」と「交換後3」はprintf()関数の第2引数でポインタを利用して結果を表示
「交換前4」と「交換後4」はprintf()関数の第2引数にアドレス演算子を利用して結果を表示
僕はこの意味がわからないので聞いたのですが恐らく
交換2は文字を交換して3は文字が入っているアドレスを交換するらしいです。

アバター
あたっしゅ
記事: 665
登録日時: 14年前
住所: 東京23区
連絡を取る:

Re: ポインタ アドレス

#6

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「

#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

みみ。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

kiraas

Re: ポインタ アドレス

#7

投稿記事 by kiraas » 1年前

コード:

#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つの交換式が必要ですか?
途中までしてみたのですがここからなにをすればいいか分かりません。、、
どうすればいいですか、

返信

“C言語何でも質問掲示板” へ戻る