;;内存存放了计算机正在运行的程序和程序正在使用的数据。内存的基本单元是字节(Byte)。;;指针与指针变量
指针:一个变量的地址
指针变量:专门存放变量地址的变量叫~;与*运算符
含义;指针变量;指针变量;指针变量的初始化
一般形式:数据类型*指针名=初始地址值;;例intmain()
{inti=10;
int*p;
*p=i;
printf(%d,*p);
return0;
};inta=20,b=15,c;
int*p1=a,*p2=b;
int*p3;
p3=p2,p2=p1,p1=p3;
c=*p2,*p2=*p1,*p1=c;
;指向数组元素的指针变量;指针的运算
指针变量的赋值运算
p=a;(将变量a地址?p)
p=array;(将数组array首地址?p)
p=array[i];(将数组元素地址?p)
p1=p2;(指针变量p2值?p1)
不能把一个整数?p,也不能把p的值?整型变量;指针的算术运算:
p?i?p?i?d(i为整型数,d为p指向的对象所占字节数)
p++,p--,p+=i,p-=i等
若p1与p2指向同一数组,p1-p2=两指针间元素个数?(p1-p2)/d
p1+p2无意义;指针变量的关系运算
若p1和p2指向同一数组,则
p1p2表示p1指的元素在前
p1p2表示p1指的元素在后
p1==p2表示p1与p2指向同一元素
若p1与p2不指向同一数组,比较无意义
;数组元素表示方法;;例:通过指针求数组中所有元素的平均值。
#includestdio.h
intmain()
{
inta[10],i;
floatsum=0;
printf(Enter10integers:\n);
for(i=0;i10;i++)
{
scanf(%d,a+i);//a+i和a[i]是等价的
sum+=*(a+i);//*(a+i)和a[i]是等价的
}
printf(Theaverageofthe10integersis:%f\n,sum/10);
return0;
}
;例:用指针求数组中的最大值及其位置。
#includestdio.h
intmain()
{inta[10],*p,*pMax;
printf(Enter10integers:\n);
for(p=a;pa+10;p++)
scanf(%d,p);
pMax=a;/*设下标为0的元素为最大值*/
p=a+1;
for(;pa+10;p++)
{
if(*p*pMax)
pMax=p;/*pMax保存最大元素的地址*/
}
printf(Themaxis%d\n,*pMax);
printf(ThepositionofMaxis%d\n,pMax-a);
return0;
};intmain()
{inti,*p,a[7];
p=a;
for(i=0;i7;i++)
scanf(%d,p++);
printf(\n);
for(i=0;i7;i++,p++)
printf(%d,*p);
return0;
};intmain()
{intt,*p,*q,a[7];
for(p=a;pa+7;p++)
scanf(%d,p);
for(;pq;p++,q--)
{t=*p;
*p=*q;
*q=t;
}
……
return0;
};例对一维数组中的数据按由小到大的顺序排序;练习:;二维数组的地址;对于二维数组:
(1)a是数组名,
包含三个元素
a[0],a[1],a[2]
(2)每个元素a[i]
又是一个一维
数组,包含4个