1.指针是一个概念,整形指针、字符指针、浮点指针是指针的具体实现
2. 指针变量是一个变量,是整形、字符、浮点等类型指针的统称,所占字节由编译器决定
3.变量有各种类型,如整形常量,整形变量;字符型常量,字符型变量。并且有相应的指针
类型,那指针常量是什么呢? 首先,指针不是地址,切记指针不是地址,指针的本质
是地址加偏移量,指针是复合类型,不是基本类型,它是由地址和类型共同决定的,并且这个
常量不是由程序员直接决定的而是由编译器决定的,这跟通常意义上的常量是不同的。
4. 编译器支持所有类型指针互转,隐式转换。编译器完全有能力处理这种隐式转换。
#include <stdio.h> int main() { typedef struct A { int a; float b; } *AP; struct A a = {2, 2.0}; // 定义结构体变量 AP ap = &a; // 定义结构体指针 int *p = ap; // 结构体指针转整形指针,隐式转换 float *q = p; // 整形指针转浮点型指针,隐式转换 printf("A.a = %d A.b = %f ", ap->a, ap->b); printf("p = ox%x *p = %d *p+1=%f ", p, (*p), *(p+1)); printf("*(q+1)=%f ", *(q+1)); return 0; }
输出:
A.a = 2 A.b = 2.000000 p = ox65fe00 *p = 2 *(p+1)=0.000000 *(q+1)=2.000000