sizeof char指针和指向该指针的指针

时间:2019-06-30 17:59:55

标签: c pointers

考虑一下:

    char *word;
    char **sentence;

为什么sizeof(*word)返回1,为什么sizeof(*sentence)返回8?

谢谢。

4 个答案:

答案 0 :(得分:2)

如果您以type *name形式声明了一个指针,则sizeof(*name)等效于sizeof(type)。如果需要实际指针的大小,请省略星号并使用sizeof(name)

答案 1 :(得分:1)

wordchar*类型,具有实现定义的大小(在您的系统上显然为8)。

*word的类型为char,根据定义,其大小为1个字节。

sentencechar**类型,是指向char的指针。

*sentence类型为char*,其实现定义的大小与word相同。

**sentence的类型为char

表达式sizeof expr(或sizeof (expr)等效于sizeof (TYPE),其中TYPEexpr的类型。expr不求值当它是sizeof的操作数时(除非它是可变长度数组类型)。

答案 2 :(得分:0)

表达式的类型不同:

  • *单词的表达式类型为char,char的大小为1
  • *句子的表达式类型为* char,* char的大小为8

答案 3 :(得分:-1)

因为指向任何类型的任何指针的大小都是一个机器或一个单词的大小 依赖于编译器,并且对于所有数据类型指针都相同,在您的情况下, 是8个字节。现在,字符的大小为1个字节。 sizeof(*word)给出由字指针指向的字节的大小,即 字符,所以它给出1个字节。

现在**sentence是该指针(双指针)的指针,表示您使用 sizeof(*sentence)实际上为您提供了一个指针的大小,该指针由 **character指针是1个字,因此它提供8个字节。

指针就像是一个线程(链接)到一个盒子(以字节为单位的内存地址),其中一些 项目(值)已放置。与“存储大型物品需要一个更大的盒子(大小因 数据类型)”,但线程(链接)不需要依赖于项目或盒子的大小,它们保持不变 指向任何盒子。

但是在使用双指针时,您实际上是在使用指向包含以下内容的框的线程 另一个实际放置值的盒子的线程。

因此您将获得第一个指针的大小,该指针包含指向实际数据类型值的链接。

如果您使用sizeof(**sentence),则会得到输出1。