char a[20];
int *ptr=a;
ptr++;
指针ptr 的类型是int*,它指向的类型是int,它被初始化为指向整形变量a。接下
来的第3 句中,指针ptr 被加了1,编译器是这样处理的:它把指针ptr 的值加上了sizeof(int)却sizeof(指向的类型),在32 位程序中,是被加上了4。由于地址是用字节做单位的,故ptr 所指向的地址由原来的变量a 的地址向高地址方向增加了4 个字节。
由于char 类型的长度是一个字节,所以,原来ptr 是指向数组a 的第0 号单元开始的四个字节,此时指向了数组a 中从第4 号单元开始的四个字节。
char a[40];
int *ptr=a;
ptr+=5;
ptr 被加上了5,编译器是这样处理的:将指针ptr 的值加上5 乘sizeof(int),在32 位程序中就是加上了5 乘4=20。由于地址的单位是字节,故现在的ptr 所指向的地址
比起加5 后的ptr 所指向的地址来说,向高地址方向移动了20 个字节.
int a="12";
int b;
int *p;
int **ptr;
p=&a;//&a 的结果是一个指针,类型是int*,指向的类型是int,指向的地址是a 的地址。
*p=24;//*p 的结果,在这里它的类型是int,它所占用的地址是p 所指向的地址,显然,*p就是变量a。
ptr=&p;//&p 的结果是个指针,该指针的类型是p 的类型加个*,在这里是int**。该指针所指向的类型是p 的类型,这里是int*。该指针所指向的地址就是指针p 自己的地址。
*ptr=&b;//*ptr 是个指针,&b 的结果也是个指针,且这两个指针的类型和所指向的类型是一样的. **ptr=34;//*ptr 的结果是ptr 所指向的东西,在这里是一个指针,对这个指针再做一次*运算,结果就是一个int 类型的变量。
文章评论(0条评论)
登录后参与讨论