C 字符指针和指针到指针的大小

C 字符指针和指针到指针的大小,c,pointers,C,Pointers,考虑这一点: char *word; char **sentence; 为什么sizeof(*word)返回1,为什么sizeof(*句子)返回8 谢谢 表达式的类型不同: 表达式*word的类型为char,char的大小为1 表达式*语句的类型为*char,*char的大小为8 如果在表单type*name上声明了指针,则sizeof(*name)相当于sizeof(type)。如果需要实际指针的大小,请省略星号并使用sizeof(name),因为指向任何类型的指针的大小都

考虑这一点:

    char *word;
    char **sentence;
为什么
sizeof(*word)
返回1,为什么
sizeof(*句子)
返回8


谢谢

表达式的类型不同:

  • 表达式*word的类型为char,char的大小为1
  • 表达式*语句的类型为*char,*char的大小为8

如果在表单
type*name
上声明了指针,则
sizeof(*name)
相当于
sizeof(type)
。如果需要实际指针的大小,请省略星号并使用
sizeof(name)

,因为指向任何类型的指针的大小都是机器或计算机上的单词的大小 编译器相关,并且对于所有数据类型指针保持不变,在您的情况下,它 是8字节。现在字符的大小是1字节。
sizeof(*word)
给出由作为 字符,因此它给出1个字节

现在,
**语句
是指针的指针(双指针),表示当您使用
sizeof(*句子)
它实际上给出了指针的大小,指针由
**字符
指针是一个单词,因此它给出8个字节

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

但当使用双指针时,实际上是在使用一个线程指向一个包含 另一个线程到放置值的实际框

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


如果您使用
sizeof(**句)
将得到输出1。

word
类型为
char*
,其大小由实现定义(在您的系统上显然是8)

*word
属于
char
类型,根据定义,其大小为1字节

句子
的类型为
char**
,指针指向
char

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

**句子属于
char
类型


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

因为
sizeof(char)
1
,而
sizeof(char*)
是8?当你在表达式中使用
*
时,它是去引用它,它不是变量名称的一部分。至少我认为这是你困惑的地方,问题不是很清楚。先生,你期望
sizeof(*单词)是什么
返回?您的标题指的是
sizeof(char*)
sizeof(char**)
,但是
*word
有类型
char
sizeof(char)
是1。也就是说,
*word
不是字符指针-它是一个
char
。表达式
*word
中的
*
是解引用运算符,而在声明
char*word;
中,它是类型名称的一部分。(这就是为什么把它放在基类型名旁边比放在变量名旁边更好的原因——它不是变量名的一部分,也不是该上下文中的运算符)是不明确的;它可以引用指向指针的指针或指向
double*
。不能保证所有对象指针类型都具有相同的大小,或者该大小是一个“单词”(C没有定义“单词”是什么)。指向函数的指针的大小通常与指向对象的指针的大小不同。指向各种对象类型的指针的大小可能不同,但这并不常见。“任何指针的大小…都是一个单词的大小”太离谱了。单词大小和指针大小没有指定为相同。@chux我的错,我当时不知道指向函数的指针。我现在学习了,谢谢:)。