ポインタのサイズ
ポインタのサイズ
ポインタのサイズについてご質問します。
int x[5];と宣言をすると、これのサイズsizeof(x)は20になります。※開発環境はVisualC++6.0です。
型はint *[5]でサイズが4つの配列が5個あるので4x5=20というのが出てきます。
次に配列にアドレス演算子&をつけます。配列にアドレス演算子&をつけると配列全体へのポインタになります。
これのサイズsizeof(&x)も20になります。型はint (*)[5]になり前者とは異なり、5個の配列へのポインタ
ということになります。これはあくまでポインタなのですがこのポインタのサイズが20になる理由を教えて下さい。
直感的にはわかるのですが、ちゃんと理解しておきたいのでお願いします。
int x[5];と宣言をすると、これのサイズsizeof(x)は20になります。※開発環境はVisualC++6.0です。
型はint *[5]でサイズが4つの配列が5個あるので4x5=20というのが出てきます。
次に配列にアドレス演算子&をつけます。配列にアドレス演算子&をつけると配列全体へのポインタになります。
これのサイズsizeof(&x)も20になります。型はint (*)[5]になり前者とは異なり、5個の配列へのポインタ
ということになります。これはあくまでポインタなのですがこのポインタのサイズが20になる理由を教えて下さい。
直感的にはわかるのですが、ちゃんと理解しておきたいのでお願いします。
Re:ポインタのサイズ
ポインタなのに20になる方がおかしい気がします
Cygwin の gccと Visual C++2008ではsizeof(&x)は4になりました
sizeof(x)についてはそういう決まりがあるので配列のサイズになります
Cygwin の gccと Visual C++2008ではsizeof(&x)は4になりました
sizeof(x)についてはそういう決まりがあるので配列のサイズになります
Re:ポインタのサイズ
>開発環境はVisualC++6.0です。
バグらしい。
http://f4.aaa.livedoor.jp/~pointc/No.22309.html
どうせ、適切な回答がもらえないとかいってまるちぽすとするんだろうな
バグらしい。
http://f4.aaa.livedoor.jp/~pointc/No.22309.html
どうせ、適切な回答がもらえないとかいってまるちぽすとするんだろうな
Re:ポインタのサイズ
こういうことです
#include <stdio.h> int main() { int x[5]; printf("xのサイズ:%u\n",(unsigned)sizeof(&x)); printf("x[0]のサイズ:%u\n",(unsigned)sizeof(&x[0])); return 0; }
Re:ポインタのサイズ
と思ったんですが
下のコードは期待どおりには動いてくれませんね
下のコードは期待どおりには動いてくれませんね
#include <stdio.h> int main() { char c[5]; printf("cのサイズ:%u\n",sizeof(&c)); printf("c[0]のサイズ:%u\n",sizeof(&c[0])); return 0; }VC++6.0 のバグでしょうかね
Re:ポインタのサイズ
返答者が頭がこんがらがって・・・
&c[0] は アドレスなので4バイトですね
c[0] が 1バイトですね
すいません
バグではないですね
#include <stdio.h> int main() { char c[5]; printf("cのサイズ:%u\n",sizeof(&c)); printf("c[0]のサイズ:%u\n",sizeof(&c[0])); printf("c[0]のサイズ:%u\n",sizeof(c[0])); // ←これ return 0; }char c[5]
&c[0] は アドレスなので4バイトですね
c[0] が 1バイトですね
すいません
バグではないですね
Re:ポインタのサイズ
うわっちゃ~
またミスってますね
No:32948 の返信は微妙に間違ってます
正確なソースは以下のようになります
私もまだまだですね
またミスってますね
No:32948 の返信は微妙に間違ってます
正確なソースは以下のようになります
#include <stdio.h> int main() { char c[5]; printf("cのサイズ:%u\n",sizeof(&c)); printf("c[0]のアドレスのサイズ:%u\n",sizeof(&c[0])); printf("c[0]のサイズ:%u\n",sizeof(c[0])); int x[5]; printf("xのサイズ:%u\n",sizeof(x)); printf("x[0]のアドレスのサイズ:%u\n",sizeof(&x[0])); printf("x[0]のサイズ:%u\n",sizeof(x[0])); return 0; }ポインタでつまづくとは・・・
私もまだまだですね
Re:ポインタのサイズ
なんかひとり勘違いをしていたようですね
#include <stdio.h>
sizeof(&x) としたら int x[5] の全体のサイズを返すので 20 です
sizeof(&x[0]) = 4 byte
sizeof(&x[1]) = 4 byte
sizeof(&x[2]) = 4 byte
sizeof(&x[3]) = 4 byte
sizeof(&x[4]) = 4 byte
合計20バイトです
int x と単品で宣言し
sizeof(&x) としたら int x のアドレスのサイズを返すので 4 です
もうすこし char でポインタの勉強をし、
理解できたら int型にチャレンジした方が良いかと思います
#include <stdio.h>
int main() { int x[5]; printf( "xのサイズ:%u\n",sizeof(&x)); printf( "x[0]のアドレスサイズ:%u\n", sizeof(&x[0]) ); printf( "x[0]のサイズ:%u\n", sizeof(x[0]) ); int y; printf( "yのサイズ:%u\n", sizeof(&y) ); return 0; }int x[5] と配列を宣言したので
sizeof(&x) としたら int x[5] の全体のサイズを返すので 20 です
sizeof(&x[0]) = 4 byte
sizeof(&x[1]) = 4 byte
sizeof(&x[2]) = 4 byte
sizeof(&x[3]) = 4 byte
sizeof(&x[4]) = 4 byte
合計20バイトです
int x と単品で宣言し
sizeof(&x) としたら int x のアドレスのサイズを返すので 4 です
もうすこし char でポインタの勉強をし、
理解できたら int型にチャレンジした方が良いかと思います
Re:ポインタのサイズ
お願いだから「ポインタのサイズ2」の私の投稿 (No.32944) を読んでほしい……。
> int x[5] と配列を宣言したので
> sizeof(&x) としたら int x[5] の全体のサイズを返すので 20 です
&xはint (*)[5]型の値,つまりポインタなのでVC++6の場合は4を返すのが「本来」正しいです。
sizeof(x)は20を返すのが正しいですが。
> もうすこし char でポインタの勉強をし、
> 理解できたら int型にチャレンジした方が良いかと思います
これはそっくりそのままdicさんに跳ね返ってきますよ。
> int x[5] と配列を宣言したので
> sizeof(&x) としたら int x[5] の全体のサイズを返すので 20 です
&xはint (*)[5]型の値,つまりポインタなのでVC++6の場合は4を返すのが「本来」正しいです。
sizeof(x)は20を返すのが正しいですが。
> もうすこし char でポインタの勉強をし、
> 理解できたら int型にチャレンジした方が良いかと思います
これはそっくりそのままdicさんに跳ね返ってきますよ。
Re:ポインタのサイズ
int x[5];
sizeof(&x) が20を返し
sizeof(x) も20を返すのでおかしいのではないのか?
ということですね
ようやく理解できました
sizeof(&x) が20を返し
sizeof(x) も20を返すのでおかしいのではないのか?
ということですね
ようやく理解できました