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我的错,我当时不知道指向函数的指针。我现在学习了,谢谢:)。