整数指针和字符指针之间的主要区别是什么?

时间:2013-08-11 11:29:54

标签: c

考虑以下代码:

int a=100;
int *p1=&a,**p2=&p1;
char *p3=&a,**p4=&p3; //Here *p1,*p3,**p2,**p4 all return 100
p4=&p1;
p2=&p3;

*p1*p3**p2**p4都返回100。

我想知道将指针指定为整数和字符的重要性。

3 个答案:

答案 0 :(得分:5)

另一个区别在于增加指针,每个指针按其相应的元素类型递增。

char *str1;
int *str2;
if you will look at the size of both the pointers lets assume
str1=4 bytes,str2=4 bytes

str1++ will increment by 1 byte but str2++ will increment 4 byte.
Reason: The ++ operator increments the pointer by the size of the pointed type.

答案 1 :(得分:1)

作为指针,基本上没有区别。区别在于取消引用指针和分配值。

类型char是字节宽类型。这意味着,它可以存储8位信息。因此char类型可以存储-127到126的数字。

Type int是一个4字节宽的类型,因此它可以存储32位信息。您可以应用相同的概念,以查看可以存储的最大值和最小值。

您可以了解更多here

答案 2 :(得分:1)

指针的类型决定了编译器对指向数据的大小和布局做出的假设。在您的示例中:

char *p3=&a
假设

&a保持char值,因此长度为一个字节。这当然不是真的,因为int至少有两个字节长(并且通常是四个字节长)。现在你仍然得到100的价值的原因是因为你很可能在兼容英特尔的CPU上运行这个代码,其中字节以小端格式存储。在这种格式中,首先存储最低有效字节,而不是最后存储。如下所示存储值为100的四字节整数(十六进制表示法):

0x64 0x00 0x00 0x00

p3指向此序列的第一个字节。因此,p3指向的内存包含一个值为100的字节。如果您要使用具有此布局的值:

0x00 0x64 0x00 0x00

25600:

int a=25600;

然后,*p3得到的值为0,因为只考虑第一个字节。

除此之外,*(p3+1)的值为100,因为将char指针递增1将导致指向下一个字节的指针(其值为100)。这与*(p1+1)不同,后者会为您提供一个位于p1之后四个字节的内存地址。