目录
一提到指针大多数人可能会头大,在学习指针之前可能都有一个疑问“指针是什么呢?”,其实说白了指针就是内存地址,而指针类型的变量就是保存内存地址的变量。常说的指针类型的变量在64位的操作系统上占8个字节(32位操作系统上占4个字节)
1 一级指针
1.1 定义
如下图①所示,我们在定义一级指针的时,如果是*和int(变量类型)在一起时表示的是数据类型,即整型指针类型。*和p在一起时是运算符
tips: ②中的p表示保存的是a的地址,*p表示的是a的地址对应的值
1.2 指针的内存大小
通过实验来证明:
#include <stdio.h>
int main ()
{
char a = 1;
short b = 1;
int c = 1;
long d = 1;
float e = 1;
double f = 1;
char *pchar = &a;
short *pshort = &b;
int *pint = &c;
long *plong = &d;
float *pfloat = &e;
double *pdouble = &f;
printf("sizeof(pchar)=%ld\n", sizeof(pchar));
printf("sizeof(pshort)=%ld\n", sizeof(pshort));
printf("sizeof(pint)=%ld\n", sizeof(pint));
printf("sizeof(plong)=%ld\n", sizeof(plong));
printf("sizeof(pfloat)=%ld\n", sizeof(pfloat));
printf("sizeof(pdouble)=%ld\n", sizeof(pdouble));
return 0;
}
运行结果:
通过上面的实验可知指针变量占8个字节的大小(我的是64位的操作系统)
1.3 指针的偏移
1.3.1 加法偏移
指针的偏移反映为地址的变化,加法偏移地址会向下的地址偏移,通过实验来证明:
#include <stdio.h>
int main()
{
char a = 10;
char *pchar = &a;
int b = 20;
int *pint = &b;
printf("&pchar = %p\n", pchar);
printf("&pchar+1 = %p\n", pchar+1);
printf("&pchar+2 = %p\n", pchar+2);
printf("&pchar+3 = %p\n", pchar+3);
printf("&pchar+4 = %p\n", pchar+4);
printf("&pint = %p\n", pint);
printf("&pint+1 = %p\n", pint+1);
printf("&pint+2 = %p\n", pint+2);
printf("&pint+3 = %p\n", pint+3);
printf("&pint+4 = %p\n", pint+4);
return 0;
}
运行结果:
由实验可知,pa+1表示地址偏移1个字节,具体偏移字节的大小与指针的数据类型相关,如char类型是1个字节,而int类型是4个字节