[解決済み] sizeof'(配列を指すポインタ)を見つけるにはどうしたらいいですか?
2022-03-14 21:45:04
質問
まず最初に、いくつかのコードを紹介します。
int main()
{
int days[] = {1,2,3,4,5};
int *ptr = days;
printf("%u\n", sizeof(days));
printf("%u\n", sizeof(ptr));
return 0;
}
という配列のサイズを調べる方法はありますか?
ptr
は、(32ビットシステムでは4バイトであるそのサイズを与えるだけでなく)指し示すのですか?
解決方法は?
いいえ、できません。 コンパイラは、ポインタが何を指しているのかわからないのです。 帯域外の既知の値で配列を終了させ、その値までのサイズを数えるというようなトリックもありますが、これでは
sizeof()
.
もう一つのトリックは、次のようなものです。
ザン
というのは、サイズをどこかに隠しておくことです。 例えば,配列を動的に確保する場合,必要なブロックよりも1つ大きなブロックを確保し,最初のint型にサイズを格納して
ptr+1
を配列へのポインタとして返します。 サイズが必要になったら、ポインタをデクリメントして、格納されている値を覗き見してください。 ただ、配列だけでなく、ブロック全体を最初から解放することを忘れないでください。
関連
-
C 構造体定義エラー: '['トークンの前に一次式があることが予想される
-
C: 1を求める! + 2! + 3! + ... + n! (ループ)
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] JavaScriptで配列を空にするにはどうしたらいいですか?
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
C/C++の再定義
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] c または c++ 用のシンプルな 2 次元クロスプラットフォームグラフィックスライブラリ?[クローズド]
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
-
[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?