No.5
- 回答日時:
> C++でchar型変数のアドレスを表示するcoutに代わる物はあるのでしょうか?
const void* にキャストしたらどうなります?
cout << (const void*)char_ptr; のように。
No.4
- 回答日時:
ANo.3
> #include <iostream>に定義してある std::cout は
> どんな型のアドレスも表示してくれません。
異議アリ。
const void* を << したときの振る舞いは明確に定義されています。
No.3
- 回答日時:
前のおふた方の回答はあってますし、丁寧に書いています。
が、長いので一言でくくります。
///////////////////////////////////////
#include <iostream>
main()
{
char a[] = "aaaaa";
std::cout << a << std::endl;
return 0;
}
/////////////////////////////////////////////
#include <iostream>に定義してある std::cout は
どんな型のアドレスも表示してくれません。
char型のアドレスを入力したら文字列が表示される、と覚えるといいです。
独学と勝手な判断だから適当に読んで。
No.2
- 回答日時:
C言語で考えてみると、
char ss[] = "computer";
char=*p; => char* p;の間違いでしょうか?
p = ss; // 問題ないですよね。
printf("%s",ss); // 問題ないですよね
とした場合、文字列Computerが表示されます。
C++で考えてみます。
printfでは、ssをどうやって表示するのかを%sだとか%dだとかで指定しています。たとえば、次のような例があります。
double d = 1.41421356;
int i = 'a';
char* str = "hogehoge";
printf("%lf,%d,%c,%s",d,i,i,str);
でもcout では、型をいっさい考えないで、
cout << d << "," << i << "," << str << "\n";
とすることができます。
これは、関数のオーバーロードというものです。ちょっとわかりにくいと思うので、簡単にoverprintという関数を考えてみます。
引数が異なる4種類のoverprintを定義します。
void overprint(int i){
printf("%d",i);
}
void overprint(double d){
printf("%lf",d);
}
void overprint(const char* str){
printf("%s",str);
}
void overprint(char c){
printf("%c",c);
}
さてここで、
char c = 'X';
overprint(c);
とするとどの関数が呼ばれるでしょうか?
これはコンパイラが自動的にvoid overprint(char c)と判断してくれます。
overprint((int)c);とすれば、void overprint(int i);が呼ばれます。
このように、同じ名前で引数が異なる関数を定義できて、自動的に正しい関数が呼ばれるのが関数のオーバーロードです。
coutは、このあたりの機能を使って、プログラマーに入出力の面倒を解放してくれているのです。
c++では、"<<"というものも関数ととらえています。
operator<<という関数に対応します。
いちどオーバーロード関数を作成して試して頂くとよいと思います。
double area(Triangle t);
double area(Square s);
double area(Square t);
double area(Circle c);
とか作ってみるとおもしろいかもしれません。
No.1ベストアンサー
- 回答日時:
std::ostream に const char* が << されたときの挙動:
std::ostream& operator<<(std::ostream&, const char*)
が定義されているから。
回答を有難うございます。正直定義の内容を理解できませんが、論理ではなく定義の問題によるという事だと理解しました。
つまりはcoutの定義上charの変数はアドレスではなく内容を返すという事ですよね。論理上、配列の変数をポインタに代入した場合(p=ss)やはりアドレスが渡されている様なので。試しにint型でやってみたら、アドレスが表示されました。
時間が出来ましたら、標準ライブラリの定義なども勉強してみます。
C++でchar型変数のアドレスを表示するcoutに代わる物はあるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- その他(コンピューター・テクノロジー) ffmpeg 動画から複数の箇所を指定して、一度の作業で同時に切り出したい 1 2022/07/03 08:35
- その他(インターネット接続・インフラ) ブラウザにIPアドレス入力した時 1 2022/06/16 19:08
- Excel(エクセル) Excel で分を抜き出すには お世話になります。C列にhh:mmで時間が入っております。このssを 2 2023/03/01 10:50
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- PHP 【スプレッドシート】順位のつけ方 2 2022/08/17 13:27
- Windows 10 確認した「IPv4アドレス」 1 2022/10/26 20:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Linux Cプログラミングを学ぶた...
-
右ビットシフト
-
プログラミングについて。 1つ...
-
プログラミングの授業の課題です
-
Notepad++の関数リスト表示の変...
-
S-JIS → JIS コード変換するには
-
C言語をコンパイルするとコンピ...
-
こんなことてしますか??
-
[C言語]fputsとfprintfの違い
-
これなにがちがうんですか??
-
win10で、正確な待ち時間の作り方
-
システムエンジニアの適正について
-
ArduinoでMouse関数を使用して...
-
gccを行ってもexeファイルが生...
-
C言語 バッファについて。
-
整数1〜99を入力させ、それを英...
-
C言語初心者 ポインタについて...
-
あなたは、Excelはどうやって学...
-
LinuxカーネルのCFSで用いられ...
-
卒業研究でよく分からないとこ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列と関数の練習問題
-
システムエンジニアの適正について
-
[C言語]fputsとfprintfの違い
-
C言語をコンパイルするとコンピ...
-
mallocについて
-
どちのほうがすきですか?
-
ArduinoのジャイロモジュールMP...
-
大量のデータを読み込んで表示...
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
C言語 列挙型(enum型)変数について
-
こんなことてしますか??
-
C言語の関数と配列に関する質問
-
Linuxでの開発環境構築や設定の...
-
質問失礼します。 プログラム言...
-
MACで動く実行ファイルをWindow...
-
WindowsのCapsLock(キャップス...
-
これなにがちがうんですか??
-
卒業研究でよく分からないとこ...
-
gcc13.2のバグ?
おすすめ情報