Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;指向字符的指针_C++ - Fatal编程技术网

C++ C++;指向字符的指针

C++ C++;指向字符的指针,c++,C++,当字符类型是指针时,为什么它的大小会改变?它不会改变,但指针的大小可能不同于字符的大小。如果将代码从sizeof(ch)更改为sizeof(*ch),则会得到11指向字符的指针不是字符,而是指针。指针的大小不取决于它指向的对象的大小。因为指针基本上是对象第一个字节的地址 8 1 问题在于ch是指向char的指针,因此ch是而不是achar。它只存储一个地址。为了存储地址,它需要一些空间,在许多系统中正好是8个字节 sizeof *ch 打印系统中char类型的大小,它是1字节指针不是它们所指

当字符类型是指针时,为什么它的大小会改变?

它不会改变,但指针的大小可能不同于字符的大小。如果将代码从
sizeof(ch)
更改为
sizeof(*ch)
,则会得到
11

指向字符的指针不是字符,而是指针。指针的大小不取决于它指向的对象的大小。因为指针基本上是对象第一个字节的地址

8
1
问题在于
ch
是指向char的
指针,因此
ch
而不是a
char
。它只存储一个地址。为了存储地址,它需要一些空间,在许多系统中正好是8个字节

sizeof *ch

打印系统中
char
类型的大小,它是1字节

指针不是它们所指向的数据,
char*
char
的类型不同

大多数指针都有相同的大小,并且通常依赖于机器体系结构,在您的情况下,它恰好是8字节,因此您几乎可以在这些行中看到一些东西:

sizeof(nch)

因为
sizeof(ch)
返回指针的大小,在您的例子中是8字节
sizeof(*ch)
您需要取消引用指针,以获取指针指向的对象的大小。为什么希望
sizeof char
sizeof char*
相关?因为指针不是字符。。。就这么简单。所有指针的大小都相同——到
char
或到大结构。。。。。不可以。指针的大小可能会有所不同,有时(尽管很少),即使在不同的情况下在同一台机器上也是如此-这就是为什么
size\t ptrSize=sizeof(ptr)
比常量更受欢迎的原因。。。幻数通常是不好的。
sizeof(nch)
不会打印任何内容。它的值是1。@PeteBecker返回值*@PeteBecker:这些行是否有任何混淆,我只是想突出显示这些行。实际上,指针的大小可能取决于它指向的对象的大小。正如我在问题上所说:Prime微型计算机的sizeof(int*)==4,sizeof(char*)==6。(素数是一个16位字寻址的机器。int*只是两个字:段+偏移量;char*必须是三个字:段+偏移量+字内的位偏移量。段字中有一个位指示位偏移量字是否存在。)谢谢,默认情况下指针大小==integer@Romi不总是,但在大多数情况下,你都可以预料到这一点。
sizeof(nch)
int* pInt;
char* pChar;
std::cout << (sizeof(pInt) == sizeof(pChar)); // prints 1 for true
std::cout << sizeof(*ch); // prints 8