C语言9.4复习(指针-函数)
关于这个版块,最有意思的就是关于C语言的精髓指针究竟精髓在哪里有了一个更深的了解。
指针函数
书上使用两个例子解释。还是很有意义记录一下的。
按值调用(Call by value)
void Fun(int par)
int main(void)
{
int arg=1;
printf("arg=%d\n",arg);
Fun(arg);
printf("arg=%d\n",arg);
return 0;
}
void Fun(int par)
{
printf("par=%d\n",par);
par=2;
}
这个程序的调用结果是函数的调用并没有改变arg变量的值,因为它改变的形参的值。
模拟按引用调用(Simulating Call Reference)
void Fun(int *par)//区别体现出来了,这个函数的声明部分反应了它是一个变量类型为指针的函数
int main(void)
{
int arg=1;
printf("arg=%d\n",arg);
Fun(&arg);//把实参的地址传递给函数Fun
printf("arg=%d\n",arg);
return 0;
}
void Fun(int *par)
{
printf("par=%d\n",*par);
*par=2;//注意这一行,它改变的是par这个地址所指的参量的值。
}
这个函数就能够实现对于参数值的改变。
而实际上这个调用函数修改参数值的程序在但是我学习的时候老师并没有首先教这个很精髓的C语言指针的用法,而是先教的使用一个有return par的函数作用对象是实数参数而不是指针的东西。结果我先记住了使用return 的修改参数值的方法,此后也一直return 但是忽略了C的精髓是指针。而实际上,很多时候不是只需要返回一个值,这就是return解决不了的了
实例
实际使用的例子就是在于使用一个函数解决学生成绩录入时,需要学生成绩的最大值以及对应的学号,如果采用指针函数来实现就非常方便了。记录一下这个函数的声明部分以及被调用的时候
void FindMax(int score[],long num[],int n,int *pMaxScore, int *pMaxNum);//声明
FindMax(score,num,n,&maxscore,&maxNum);//调用
还有一个例子在于使用指针变量指向一个函数。这个部分的应用非常精彩,记录如下。
void SelectionSort(int a[],int n,int (*compare)(int a,int b))//(*compare)表示这个指针变量可以指向一个函数
{
int i,j,k;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;i<n;j++)
{
if((*compare)(a[j],a[k]))k=j;
}
if(k!=i)Swap(&a[k],&a[i]);//Swap函数就是实现整数值互换的功能,就不在下面多写了
}
}
int Ascending(int a,int b)//升序排序函数
{
return a<b;//返回比较小的数字
}
int Descending(int a,int b)
{
return a>b;
}
本文探讨了C语言中指针的重要性和应用,通过对比按值调用与按引用调用,介绍了如何利用指针函数修改参数值。此外,还展示了使用指针变量指向函数的实际案例。
1670

被折叠的 条评论
为什么被折叠?



