/******************************************************/
/**************---About Pointer--------**************/
/**************---Author: Tibruce Zhao---**************/
/**************---Date: 2015/8/30------**************/
/******************************************************/
//'*'的作用:通过地址访问变量。
//#include<iostream>
#include<stdio.h>
int main()
{
char x[9]={'a','b','c','d','e','f','g','h'};
puts(x);
char *p1;
p1=&x[0];
char *p2=&x[2];
printf("%c\n",*p1);
*p1='A';
*p2='C';
puts(x);
char *p3=&x[3]; //指针类型为char型
printf("%d\n",*p3);//'a'为97,x[0]。
printf("******************第二期*************************");
int a[5]={11,22,33,44,55};
int *p;//野指针,程序中避免野指针,考虑用空指针
printf("p=%p\n",p);
int *q=NULL;
printf("q=%p,q=%d\n",q,q);
#define T int*
union {
T x;
char b[sizeof(T)];
}u;
u.x=q;
int i;
for(i=0;i<sizeof(T);i++)
printf("%d ",u.b[i]);
printf("\n");
//*p=100;可能导致非法内存访问
p=a;//数组当做数据用时表示第一个元素的地址
for(i=0;i<5;i++) printf("%d ",a[i]); printf("\n");
for(i=0;i<5;i++) printf("%d ",*(a+i)); printf("\n");
for(i=0;i<5;i++) printf("%d ",p[i]); printf("\n");
for(i=0;i<5;i++) printf("%d ",*(p+i)); printf("\n");
printf("%d \n",(p+2)[1]);//*(p+2+1)==>p[3]
q=p+3;
printf("%d \n",1[q]);//p[4]
printf("p=%p,q=%p,q-p=%d\n",p,q,q-p);
for(i=0;i<5;i++) printf("%d ",*p+i); printf("\n");//*p为11
for(i=0;i<5;i++) printf("%d ",*p++); printf("\n");//++的优先级比*的高(++会改变p的值)
for(i=-5;i<0;i++) printf("%d ",p[i]); printf("\n");//输出为11 22 33 44 55
for(i=0;i<5;i++) printf("%d ",*--p); printf("\n");
return 0;
}