关于指针指向内容与指针自身值我们要区分开来,定义一个指针如:int *p,则指针的类型为int *(从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型),而指针的指向类型为int型。
下面上一段代码,代码中有详细注释,我就不细说原理了!
#include<stdio.h>
/*
* 在下例中,指针p 的类型是int*,它指向的类型是int,它被初始化为指向整型变量a。接下来的第3句中,
指针p被加了1,编译器是这样处理的:它把指针ptr 的值加上了sizeof(int),在32 位程序中,是被加
了4,因为在32 位程序中,int 占4 个字节。
由于地址是用字节做单位的,故p所指向的地址由原来的变量a 的地址向高地址方向增加了4 个字节。
由于char 类型的长度是一个字节,所以,原来ptr 是指向数组a 的第0 号单元开始的四个字节,此时指向了
数组a 中从第4 号单元开始的四个字节。
我们可以用一个指针和一个循环来遍历一个数组,看例子:
*
*
*/
int main()
{
char a[]={'a','c','v','w','q','e'};
int *p=(int *)a; //强制类型转换并不会改变a的类型
printf("指针p的初始值为:%d\n",p);
p++;
printf("指针自加后的值为:%d\n指针自加后指向的值为:%c\n",p,*p);
char *q=a;
printf("\n\n\n%d\n",q);
q++;
printf("%d\n",q);
printf("%c",*q);
}
再来看看运行结果:
具体原因代码上已经写清楚,理清思路,掌握基础。
因篇幅问题不能全部显示,请点此查看更多更全内容