C语言中的指针类型用于告诉指针,其所指向的地址存放什么数据类型,而指针本身占用8个字节(64位编译器)的大小跟类型无关。
但对指针进行输入、输出操作时,指针的类型却至关重要。
例如输出时,如果指针定义为char类型,则指针会从所指向的地址至内存高位寻找1Byte(64位编译器)的内容输出。
如果定义为int类型,则会从所指向的地址至内存高位寻找4Byte(64位编译器)。
int main()
{
/*
假设变量在内存中的地址如下
变量 (内存地址)
a ---> ff3
b ---> ff2
c ---> ff1
d ---> ff0
内存中的位置如下
低位
p4 --> &d --> ff0 --> 0110 0100 (100)
p3 --> &c --> ff1 --> 0110 0011 (99)
p2 --> &b --> ff2 --> 0110 0010 (98)
p1 --> &a --> ff3 --> 0110 0001 (97)
高位
因为p为int类型 所以输出*p时会输出4个字节
p1 --> &a --> ff3 --> 0000 0000 0000 0000 0000 0000 0110 0001
(97)
p2 --> &b --> ff2 --> 0000 0000 0000 0000 0110 0001 0110 0010
(24930)
p3 --> &c --> ff1 --> 0000 0000 0110 0001 0110 0010 0110 0011
(6382179)
p4 --> &d --> ff0 --> 0110 0001 0110 0010 0110 0011 0110 0100
(1633837924)
*/
char a='a';
char b='b';
char c='c';
char d='d';
int *p1=&a;
int *p2=&b;
int *p3=&c;
int *p4=&d;
printf("&a=%p, &b=%p \n&c=%p, &d=%p \n",&a,&b,&c,&d);
printf("*p1=%d, *p2=%d, *p3=%d, *p4=%d\n",*p1,*p2,*p3,*p4);
return 0;
}
输出结果
&a=0x7fff5a461c23, &b=0x7fff5a461c22
&c=0x7fff5a461c21, &d=0x7fff5a461c20
*p1=97, *p2=24930, *p3=6382179, *p4=1633837924