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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

636閲覧

C++ memcpyの実装

mkn66

総合スコア41

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/01/27 10:45

c++の memcpy の実装についてです

c++

1void * memcpy( void * dest, void const * src, std::size_t n ) 2{ 3 // destをstd::byte *型に変換 4 auto d = static_cast<std::byte *>(dest) ; 5 // srcをstd::byte const *型に変換する 6 auto s = static_cast<std::byte const *>(src) ; 7 8 // srcからnバイトコピーするのでnバイト先のアドレスを得る 9 auto last = s + n ; 10 11 // nバイトコピーする 12 while ( s != last ) 13 { 14 *d = *s ; 15 ++d ; 16 ++s ; 17 } 18 19 // destを返す 20 return dest ; 21}

1: destはアドレスの値の数値で4バイト(自分の環境だと)だがstd::byte *型は1バイトなので型変換したらどうなるのでしょうか?

2: d,sはアドレスを表していると思うのですが*d,*sは何を表しているのでしょうか?

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

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

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

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

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

guest

回答2

0

[別件] これでいぃんじゃないかと:

C++

1void * memcpy( void * dest, void const * src, std::size_t n ) { 2 // destをstd::byte *型に変換 3 auto d = static_cast<std::byte *>(dest) ; 4 // srcをstd::byte const *型に変換する 5 auto s = static_cast<std::byte const *>(src) ; 6 7 // nバイトコピーする 8 while ( n-- ) { 9 *d++ = *s++ ; 10 } 11 12 // destを返す 13 return dest ; 14}

投稿2022/01/27 13:25

episteme

総合スコア16614

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

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

0

ベストアンサー

アドレスのサイズは、指し先の型に関わらず変わりません

*d,*sは何を表しているのでしょうか?

指し先の内容を表します

投稿2022/01/27 11:17

編集2022/01/27 11:19
y_waiwai

総合スコア87749

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

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

mkn66

2022/01/27 14:05 編集

dはdestと型が違うだけで数値は同じなのでしょうか?
y_waiwai

2022/01/27 15:14

同じ、アドレスを持っています
mkn66

2022/01/27 17:41

追加の質問で申し訳ないのですが destはvoid*型でアドレスのサイズが8バイトなのに、どうして1バイトのstd::byte*型に変換できるのでしょうか? もしくは、destが参照している1バイトのアドレスをstd::byte*型に変換しているのでしょうか? std::byte*型に変換することはどのような意味があるのでしょうか? 訳がわからない質問だったらすいません。
y_waiwai

2022/01/27 22:31

ポインタ、というかアドレス値に誤解があるようです。 変数というのを家とするなら、 そのアドレスってのは緯度経度になります ワンルーム(byte)の緯度経度も、一軒家(int)の緯度経度もサイズは変わりません ひるがえって、それがタワマンだろうが、高層ビルだろうが、緯度経度のサイズは一緒ですね さて、一つの緯度経度(アドレス)が渡されたときに、それが果たしてなにを指すアドレスなのか、ってのはそれだけでは判定できません。 ということで、このアドレスを、byteを指すアドレスだ!とムリヤリ解釈してアクセスするのです
mkn66

2022/01/28 03:48

分かりやすい説明ありがとうございます。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問