指针是一个变量,存储的是另一个变量的地址。
例如,有如下代码:
int a = 3;
int *ptr = &a;//定义一个指向整形的指针,变量前加一个*即为一个指针变量
可以这么理解,定义变量a后,系统为a分配一个大小为sizeof(int)的空间,该空间的地址存放在变量ptr中。
如果printf("%p", ptr);则打印输出0xbfb12000。
用图表示即为:
变量ptr=0xbfb12000, *ptr=3(0xbfb12000空间存储的值), &ptr=ptr变量的地址
区分变量与指针变量:
int a;
float b;
double c;
char d;
char e[8];
float *f = &b;
char *g= "abcdefg";
void *h;
其中a,b,c,d,e[0]是普通变量,e是数组的首地址,可看做是一个指针,f,g,h都是指针变量。
变量的地址用取地址符来获取,如&a, &b, &c, &d,&e[0](取e[0]的地址,等于e),&e[7],同样可以&e, &f, &g, &h。
指针的值的获取,用*,如*f则输出变量b的值。
指针变量的类型与大小:有
int *a;
float *b;
double *c;
char *d;
void *e;
还有自定义类型,等等
不管什么类型的指针,其所占用的空间大小是一定的,在32位机上,
sizeof(float *)=sizeof(int *)=sizeof(long *)=sizeof(long long *)=sizeof(double *)=sizeof(char *)=4字节。