关于指针自加的变化

关于指针指向内容与指针自身值我们要区分开来,定义一个指针如: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);
	 
}

再来看看运行结果:

具体原因代码上已经写清楚,理清思路,掌握基础。

猜你喜欢

转载自blog.csdn.net/eternal_yangyun/article/details/80950152