1、变量访问方式:
直接访问:按变量地址存取变量值的方式
printf("%d",i);
scanf("%d",&i)
k=i+j;
……
间接访问:将变量的地址存放在另一个变量中。
例子:
#include<stdio.h>
void main()
{
int i,j;
int *pointer;
pointer=&i;
*pointer=3;
printf("i=%d\n",i);
printf("*pointer=%d\n",*pointer);
printf("pointer=%u\n",pointer);
}
2、指针变量作为函数参数
#include<stdio.h>
void main()
{
void swap(int *,int *);
int a,b;
int *pointer1,*pointer2;
pointer1=&a;
pointer2=&b;
a=1;
b=99;
printf("a=%d\n",a);
printf("b=%d\n",b);
swap(pointer1,pointer2);
printf("After swap:\na=%d\n",a);
printf("b=%d\n",b);
}
void swap(int *p1,int *p2)
{
int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
如果将swap函数改为
void swap(int *p1,int *p2)
{
int *temp;
*temp=*p1;
*p1=*p2;
*p2=*temp;
}
由于temp所指向的单元是不可预见的,对*temp赋值可能破坏系统的正常工作状态,运行结果为:
3、数组与指针
引用数组元素可用下标法(如a[3]),也可用指针法(即通过指向数组元素的指针)。
指针法能使程序质量高(占内存少,运行速度快)。
int a[10];
1)、int *p=a 与 int *p=&a[0] 等价;
2)、*(p+i) 与 *(a+i)与 a[i] 与 p[i] 等价;
#include<stdio.h>
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
int *p=a;
printf("a[5]=%d\n",a[5]);
printf("*(p+5)=%d\n",*(p+5));
printf("*(a+5)=%d\n",*(a+5));
printf("p[5]=%d\n",p[5]);
}
注意:
a++;是错误语句。数组名a是常量指针。编译器会报错。