C中指针变量的范围

C中指针变量的范围,c,pointers,C,Pointers,我有一个基本问题, 就像C所说的,一个char对象将是一个字节 因此,对于无符号字符,范围是从0到255 但是在一个字符指针的情况下,一个字节的变量如何能存储超过255个字符呢 如下图所示 我发现a字符指针p存储的值为2358855>255 其中我知道值2358855是地址,但是一个1字节的对象怎么能存储超过255个呢 有人能帮上忙吗?地址表示内存中对象所在的位置。它不同于它所指向的实际类型,并且不需要相同的大小 如果一个字符的指针只能容纳256个值,那么它就没有多大用处了。这意味着只能寻址25

我有一个基本问题, 就像C所说的,一个char对象将是一个字节 因此,对于无符号字符,范围是从0到255

但是在一个字符指针的情况下,一个字节的变量如何能存储超过255个字符呢

如下图所示 我发现a字符指针p存储的值为2358855>255

其中我知道值2358855是地址,但是一个1字节的对象怎么能存储超过255个呢


有人能帮上忙吗?

地址表示内存中对象所在的位置。它不同于它所指向的实际类型,并且不需要相同的大小


如果一个字符的指针只能容纳256个值,那么它就没有多大用处了。这意味着只能寻址256字节的字符。

指向类型的指针不受类型本身大小限制的约束

简单证明:

if(sizeof(char *)==sizeof(char))
{
     printf("I\'ll never get anything done like this.\n");
}
else
{
     printf("Life is good!\n");
}

指向char的指针char*是指向地址的指针,与char不同。在32位程序中,任何不仅仅指向char的指针都有8个字节或4个字节,因此可以存储大量的值。如果要从指针返回指向的值(在本例中为字符),则必须取消对该值的引用printfderereferenced pointer=%c\n,*p;。请在问题中逐字记录文本-代码和输出,而不是屏幕截图。旁白:请注意,不应尝试将指针打印为int。它应为printfp=%p\n,void*p;嗨@CristiFati:实际上我想知道指针内部是如何工作的?比如说,若char变量只能存储1字节->255,那个么指针变量如何在内部工作以存储超过255字节??指针是一个8字节长的不同变量p。在我们的例子char变量中,指针和指针对象之间的唯一联系是指针变量值是指针对象的地址。我相信谷歌会提供大量关于这个问题的教程。你为什么不引用这一条?此外,您还可以证明两个指针的大小是相同的,无论它们的类型如何。@IharobAlAsimi:1。这是很好的练习2。C标准仅保证char*和void*具有相同的内部表示和大小;其他指针类型可能不会necessarily@IharobAlAsimi很好的一点是Govind没有比较不同指针类型的大小。@WeatherVane我知道,但这可以帮助OP理解。。。我想。@GovindParmar我不是100%肯定,但是。。。如果任何指针都可以转换为void*和viceversa,那么我怀疑它们都具有相同的大小。否则,转换将不可能。在这种情况下,可能强制转换malloc的返回值。举一个非常有争议的良好实践的例子,不抛出malloc的返回值。这实际上是最有名的问题。