您的位置:首页 > 其它

指针——C的精华

2015-07-23 09:59 211 查看
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是常量指针。编译器会报错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: