2017-11-06 6 views
-1
#include <stdio.h> 



#define R 10 

#define C 20 



int main() 

{ 

    int (*p)[R][C]; 

    printf("%d", sizeof(*p)); 

    getchar(); 

    return 0; 

} 

O/P =ここで800発見サイズ

pが.. 2次元配列へのポインタであるため、そのO/Pは4または8であるべきではありませんか?

+9

printf reference page礼儀ポインタのサイズではなく、2D配列(R = 10、C = 20、 'int'のサイズは4、したがって10 * 20 * 4 = 800)を使用します。 sizeof 'p'を実行してください。 – AntonH

+4

あなたは 'sizeof'に間違ったフォーマットを使用しています。例えば、 [この 'printf'(および家族)の参考文献](http://en.cppreference.com/w/c/io/fprintf)を参照してください。 –

+4

'sizeof p'はpのサイズを意味します。 'sizeof * p'は、pが何を指すかの大きさを意味します。 –

答えて

1

ここで問題となるのは、ポインタのサイズではなく、ポインタが指しているメモリチャンクのサイズです。

R = 10、およびC = 20。 intのサイズは、システム上で4バイトです。したがって、10 * 20 * 4 = 800。だからあなたのコードでprintf("%d", sizeof(*p));はを印刷します。

あなたはポインタ変数のサイズを印刷する探しているなら、あなたはこのようにコードを変更する必要があります:

printf("%d", sizeof(p)); 

参考:あなたはサイズを印刷しているsome-programmer-dude

+0

ありがとう、ありがとうございます。 –

+0

@AntonH参照してください[受け入れるユーザーとは何ですか...](https://meta.stackoverflow.com/q/297597/2410359) – chux

+0

@chux https:/ /meta.stackexchange.com/questions/14994/do-you-feel-dirty-if-you-nudge-new-users-to-accept-your-answer-when-they-indicate with duplicates [ここ](https: //meta.stackexchange.com/questions/88535/asking-for-someone-to-accept-your-answer)と[ここ](https://meta.stackexchange.com/questions/136833/is-it-okay)私の答えを受け入れるためのユーザから受諾者への質問)。私は答えをアップアップするように頼んだわけではありません。 – AntonH