学习笔记:指针的使用

例一:初识指针

#include<stdio.h>
int main(void)
{
	int *p ;
	int m ;
	p = &m ;
	return 0;
}

在第四行我们定义了一个指针变量,这个变量存储的是一个地址,我们都知道任何变量是在内存中某一个地址存储的,我们可以用这个指针变量来指向一个变量,比如在这个例子中。我们取了m变量的地址赋给了指针p,此时指针变量p存储的就是变量m的地址,也就是说指针p指向了m。在此基础上,我们可以用指针干更多的事情。

例二:利用指针修改数据

这个程序可以对两个数从小到大输出

#include<stdio.h>
swap(int *p1 , int *p2)
{
	int tem;
	tem=*p1;
	*p1=*p2;
	*p2=tem;
}
int main(void)
{
	int a,b;
	int *pd_1,*pd_2;
	scanf("%d,%d",&a,&b);
	pd_1=&a;
	pd_2=&b;
	if(a>b)
	{swap(pd_1,pd_2);}
	printf("a=%d,b=%d",a,b);
return 0;
}

我们用一个自定义函数swap来修改数据,参数是两个变量的指针,如上,就可以很方便的达到目标。

例三:指针与一维数组

#include<stdio.h>
int a[7],i,tem;
int *p=&a;
int f(int *a)
{
	printf("\n");
	*(p+1)=10;
}

int main(void)
{
	for(i=0;i<=6;i++)
		{a[i]=i+1;}
	for(i=0;i<=6;i++)
	{printf("%d ",a[i]);}
	f(a);
	for(i=0;i<=6;i++)
	{printf("%d ",a[i]);}
return 0;
}

在这里我们先定义了几个全局变量,其中包含指针p和数组a。然后指针p指向数组a,此时如果我们同时输出指针p和数组a的a[0]地址,我们会发现这两者是完全相同的,也就是说,当我们令一个指针指向数组时,指针存储的是该数组的第一个数据的地址。那如果我们对这个指针加一呢?对了,就是这个数组的第二个数据。而且我们可以在自定义的函数中添加指针变量,然后利用指针修改该数组的值,这相当于我们可以使自定义的函数返回一个数组,非常方便。

例如:

这个程序可以对五个数排序

#include<stdio.h>
woc(int *book,int n)
{
	int i,j,tem=0;
	for(i=1;i<=5;i++)
		{scanf("%d",&book[i]);}
	for(i=1;i<=4;i++)
		{for(j=1;j<=4;j++)
			{if(book[j]>book[j+1])
				{tem=book[j];
				book[j]=book[j+1];
				book[j+1]=tem; 
				}
			}
		}
	for(i=1;i<=5;i++)
	{printf("%d  ",book[i]);}
}

int main(void)
{
	int a[20],i;
	woc(a,10);
return 0; 
}

运行结果是
对五个数排序

例四:函数做函数的指针

先上一段代码

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
	srand((unsigned)time(NULL));
	double(*fp1)(double,double);
	int(*fp2)();
	fp1=pow;
	fp2=rand;
	printf("%lf,%d",fp1(2,5),fp2()); 
}

我们用语句double(*fp1)(double,double);定义了一个名为“fp1”的double型函数,并且这个函数有两个double类型的参数,令fp1=pow(pow是math.h里面的一个函数,用于计算幂值,如pow(2,5)表示2的5次方),这个时候fp1这个指针就指向了pow这个函数,同理,用语句int(*fp2)();定义了一个int型的函数fp2,令fp2=rand,没有参数。这样我们就可以让函数作为函数的参数了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值