考虑一下:
char *word;
char **sentence;
为什么sizeof(*word)
返回1,为什么sizeof(*sentence)
返回8?
谢谢。
答案 0 :(得分:2)
如果您以type *name
形式声明了一个指针,则sizeof(*name)
等效于sizeof(type)
。如果需要实际指针的大小,请省略星号并使用sizeof(name)
。
答案 1 :(得分:1)
word
是char*
类型,具有实现定义的大小(在您的系统上显然为8)。
*word
的类型为char
,根据定义,其大小为1个字节。
sentence
是char**
类型,是指向char
的指针。
*sentence
类型为char*
,其实现定义的大小与word
相同。
**sentence
的类型为char
。
表达式sizeof expr
(或sizeof (expr)
等效于sizeof (TYPE)
,其中TYPE
是expr
的类型。expr
不求值当它是sizeof
的操作数时(除非它是可变长度数组类型)。
答案 2 :(得分:0)
表达式的类型不同:
答案 3 :(得分:-1)
因为指向任何类型的任何指针的大小都是一个机器或一个单词的大小
依赖于编译器,并且对于所有数据类型指针都相同,在您的情况下,
是8个字节。现在,字符的大小为1个字节。
sizeof(*word)
给出由字指针指向的字节的大小,即
字符,所以它给出1个字节。
现在**sentence
是该指针(双指针)的指针,表示您使用
sizeof(*sentence)
实际上为您提供了一个指针的大小,该指针由
**character
指针是1个字,因此它提供8个字节。
指针就像是一个线程(链接)到一个盒子(以字节为单位的内存地址),其中一些 项目(值)已放置。与“存储大型物品需要一个更大的盒子(大小因 数据类型)”,但线程(链接)不需要依赖于项目或盒子的大小,它们保持不变 指向任何盒子。
但是在使用双指针时,您实际上是在使用指向包含以下内容的框的线程 另一个实际放置值的盒子的线程。
因此您将获得第一个指针的大小,该指针包含指向实际数据类型值的链接。
如果您使用sizeof(**sentence)
,则会得到输出1。