//指针基本概念
#include <stdio.h>
/*
p是一个指向整形变量的指针。
// * --> 取值运算符
& --> 取地址运算符
p == &a
*p == a
*/
int main()
{
int a,b,c,i;
int *p;
int arr[]={1,2,3,4}; //数组的名字代表着起始地址
a=10;b=20;c=30;
p=&a;
//打印abc变量的地址和值
printf("&a=%p &b=%p &c=%p\n",&a,&b,&c);
printf(“a=%d b=%d c=%d\n”,a,b,c);
printf("’*p’=‘a’=%d\n’p’=’&a’=%p\n",*p,p)
//指针的运算
//算数运算
for(i=0;i<4;i++,p++) //这里直接 p++ == p=p+1 ,等于向后移一个元素
printf("%d “,*p);
printf(”\n");
//上面的p++是直接对指针进行了改变,现在还原到第一个元素 负责就是从a[5]开始了。
p=arr;
//还可以通过下标引用。
for(i=0;i<4;i++)
printf("%d ",p[i]);
//指针的差值运算
int *p1,*p2;
p1=arr;
p2=&arr[5];
printf(“等于a[0]~a[5]的距离%d\n”,p2-p1); //p2-p1 == p1+5-p1=5
// a[0]a[1]a[2]a[3]a[4]a[5]
//也可以计算二维数组的差值
int d[4][4];
p1=&d[0][2];
p2=&d[3][1];
printf(“p2-p1 = %d\n”,p2-p1);
//指针变量运算 > < ==
float f1[6];
float *p3=f1,p4=&f1[2];//这里在定义的同时进行初始化,可以把p3=f1 看作俩句 float *p3 和 p3=f1;
printf(“p3 == p4:%d\n”,p3 == f1);
printf(“p4>p3:%d\n”,p4>p3);
double db[]={0,1,2,3,4,5,6,7,8,9},*p5;
for(p5=db;p5<=db+9;p5++) //玩法很多样 ,但是for循环的 p不能改成db,因为db是一个常量,而p是一个变量
printf("%.2lf “,*p5);
printf(”\n");
}