質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

610閲覧

演算子に関する質問です。

carnage0216

総合スコア194

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/07/29 08:22

演算子に関する質問です。

#include <stdio.h> int main(void){ // Your code here! char str[5]={"abcde"}; int i; for(i = 0; i < 1; i++){ printf("%x\n", &str[i]);//一週目のiは printf("%p\n", &str[i]);//i++が働かない printf("%x\n", str + i);//のでiには printf("%x\n", &*(str + i));//0が入る } }

%pにより &str[i]のアドレスを表示しようとしたのですが、e7a6d0b8ではなく0x7ffee7a6d0b8と表示されました。なぜでしょうか?
というか%xとはアドレスを表示するための演算子という認識で合ってますよね?

実行結果 e7a6d0b8 0x7ffee7a6d0b8 e7a6d0b8 e7a6d0b8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

なぜでしょうか?

正しいポインタの値は0x7ffee7a6d0b8の方です。%xは、正しくない指示子を使ったために、一部しか出力されていません。

というか%xとはアドレスを表示するための演算子という認識で合ってますよね?

合っていません。整数を16進法表記するための指示子です(演算子ですらありません)。幅指定を書かない場合はintとして処理されます。

投稿2021/07/29 08:28

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2021/07/29 09:14 編集

ありがとうございます。 >>%xは、正しくない指示子を使ったために、一部しか出力されていません。 とのことですが、それでも0x7ffee7a6d0b8の後半部分(e7a6d0b8)が合っているのはなぜでしょうか? %pも%xと同じようにメモリに入った二進数の文字列を16進数に変換し、なおかつメモリに入っている二進数をすべて表示するためでしょうか?
maisumakun

2021/07/29 09:15

考えても役に立ちません。型が合わない指定子を使った場合の動作は「未定義」です。
guest

0

%xとはアドレスを表示するための演算子という認識で合ってますよね?

違います。マニュアル/リファレンスを読んでから訊きましょう。

投稿2021/07/29 08:28

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問