6黑马程序员--C语言之指针
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、指针的定义
在程序中定义了一个变量,在对程序进行编译时,系统就会给这个变量分配
内存单元。编译系统会根据程序中定义的变量类型,分配一定长度的空间。内存
区的每一个字节有一个编号,这就是地址,在地址所标志的内存单元中存放的数
据,地址又可形象地成为指针,地址指向该变量单元。
例如:指针变量访问整型变量
#include<stdio.h>
int main()
{
int a =100,b=10;
int *p1,*p2;//定义两个指针变量
p1=&a;p2=&b;//把a、b的地址分别赋值给p1、p2
printf("a=%d,b=%d");
printf("*p1=%d,*p2=%d");//输出指针变量的值
return 0;
}
2、定义指针变量时注意:
1)指针变量前面的*表示该变量类型是指针类型变量;
2)在定义指针变量时必须指定基类型;(一个变量指针的含义包括两个方面
,一是存储单元编号表示的地址,一是它指向的存储单元的数据类型)
3)指向整形数据的指针类型表示为“int*”,读作指向int的指针,简称int
指针。
4)指针变量中只能存放地址,不能将一个整数赋值给指针
如;*p1=100;//这是错误的
3、指针变量的应用
例如:输入两个数,按照先大后小的顺序输出
#include<stdio.h>
int main()
{
int *p1,*p2,*p,a,b;
printf("请输入两个数:");
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if(a<b){
p=p1;
p1=p2;
p2=p;
}
printf("a=%d,b=%d",a,b);
printf("max=%d,min=%d,*p1,*p2");
rerurn 0;
}
4、指针引用数组
1)数组元素的指针就是数组元素的地址;
2)指针指向数组元素时,可以加减一个整数用来访问同一数组中的相邻元素
。
3)如果p的初值为&a[],则p+i和a+i就是数组元素a[i]。
4)如果指针变量p1和p2都指向同一数组,如果指向p2-p1结果为p2-p1的地址
差除以数组元素的长度。
例如:将数组a中的n个整数按相反顺序存放
#include<stido.h>
int main()
{
void inv(int*x,int n);
int i,arr[10],*p=arr;
printf("排序之前的顺序为:");
for(i=0;i<10;i++,p++)//输入arr数组元素
scanf("%d",p);
printf("\n");
p=arr;//指针p重新指向arr[0]
inv(p,10);//调用inv函数
printf("排序之后的顺序为:");
for(p=arr;p<arr+10;p++)
printf("%d",*p);
printf("\n");
return 0;
}
void inv(int*x,int n){
int *p,m,temp,*i,*j;
m=(n-1)/2;
i=x;j=x+n-1;p=x+m;
for(;i<=p;i++,j--)
{
temp=*i;
*i=*j;
*j=temp;
}
return;
}