Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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 - Fatal编程技术网

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

C 整数指针和字符指针的主要区别是什么?,c,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 我想知道将指针指定为整数和字符的意义。另一个区别在于当您递增指针时,每个指针都会按其相应的元素类型递增 char *str1; int *str2; if you w

考虑以下代码:

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


我想知道将指针指定为整数和字符的意义。

另一个区别在于当您递增指针时,每个指针都会按其相应的元素类型递增

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.

作为指针,基本上没有区别。不同之处在于取消引用指针和赋值时

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

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


您可以了解更多信息

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

char *p3=&a
&假定a
包含一个
char
值,因此长度为一个字节。这当然不是真的,因为
int
至少有两个字节长(通常是四个字节长)。现在,您仍然从中获取值100的原因是,您很可能在与Intel兼容的CPU上运行此代码,其中字节以little endian格式存储。在这种格式中,最低有效字节存储在第一位,而不是最后一位。值为100的四字节整数存储如下(十六进制表示法):

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

0x00 0x64 0x00 0x00
即25600:

int a=25600;
然后,您将得到的
*p3
值为0,因为只考虑第一个字节


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

之后四个字节的内存地址,现在请尝试再次运行它,但使用
int a=1000
。我希望
*p3
**p4
返回
'd'
(当然,假设是ASCII字符集)。
char
也是一个整数类型,它最多可以存储255个字符(在无符号的情况下,即我考虑的是最大值),如果你取的值大于255,你可能会得到不可预知的结果,正如Oli所描述的,只需尝试使用
int a=1000
运行它,例如
char
指针表示指向至少1个字节的内存位置的指针,而
int
指针表示指向4个字节(至少2个)的内存位置的指针。“作为指针,基本上没有区别。”。不是真的。尝试递增每个指针。我的意思是,它们都是指针,大小相同,函数相同,指向内存位置。但它们指向不同的东西,当它们指向不同的东西时,在不同的宽度上,当它们递增时,它们以不同的方式递增(字符指针递增1,整数指针递增4)。
int a=25600;